@fabricorg/platform-host 7.2.3 → 7.4.0
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/CHANGELOG.md +81 -0
- package/README.md +258 -1
- package/dist/index.cjs +838 -109
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +310 -14
- package/dist/index.d.ts +310 -14
- package/dist/index.js +833 -108
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/command-identity.ts","../src/observability.ts","../src/host-internals.ts","../src/external-completion.ts","../src/host.ts","../src/outbox.ts","../src/memory-store.ts","../src/postgres-migrations.ts","../src/postgres-store.ts","../src/worker.ts","../src/saga-parent-lifecycle.ts","../src/tenant-isolation.ts"],"names":["actionResult","read","patch","createHash","fail","governanceStore","result","deadlineMs","record","db","sql","lifecycleId"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n\tActionId,\n\tActionDefinition,\n\tActionStatus,\n\tAgentActionPolicyEvaluator,\n\tAgentActionRiskTier,\n\tAgentActionRoute,\n\tActorType,\n\tAdapterImplementation,\n\tAssetEventEnvelope,\n\tFabricRuntimeServices,\n\tPolicyOutcome,\n\tPolicyObligation,\n\tPolicyObligationStatus,\n\tExecutionAttestation,\n\tExternalReconciliation,\n\tEvidencePacketReference,\n\tMutationFootprint,\n\tExecutionPrincipal,\n\tMutationGovernanceResolver,\n\tGovernanceRuntimeEvidence,\n\tRuntimePolicyDefinition,\n\tModuleRegistry,\n} from \"@fabricorg/platform\";\nimport type { PlatformHostTelemetry } from \"./observability\";\nimport type { AssemblyLockfile } from \"@fabricorg/assembly\";\n\n/** Durable Host lifecycle generation, independent from the npm package version. */\nexport const PLATFORM_HOST_CONTRACT_VERSION = 2 as const;\n\nexport type InvocationSource = \"ui\" | \"api\" | \"agent\" | \"worker\" | \"system\" | (string & {});\nexport type NamespacedAttributes = Record<string, string>;\nexport interface InvocationProvenance {\n\tsource: InvocationSource;\n\tcorrelationId: string;\n\tcausationId?: string;\n\ttraceAttributes?: NamespacedAttributes;\n\tauditAttributes?: NamespacedAttributes;\n}\n\nexport type AuthorizationGoverningMoment = \"capture\" | \"execution\" | \"both\";\nexport interface AuthorizationBinding {\n\tid: string;\n\ttenantId: string;\n\tactorId: string;\n\tactionId: string;\n\tparameterDigest: string;\n\tresourceScope?: string;\n\tcapturedAt: string;\n\texpiresAt?: string;\n\tgoverningMoment: AuthorizationGoverningMoment;\n}\n\nexport interface IdempotencyConflict {\n\tcode: \"IDEMPOTENCY_CONFLICT\";\n\tidempotencyKey: string;\n\texistingInvocationId: string;\n\treasons: Array<\"actor\" | \"authority_binding\" | \"action_version\" | \"parameters\">;\n}\n\nexport class IdempotencyConflictError extends Error {\n\treadonly code = \"IDEMPOTENCY_CONFLICT\" as const;\n\tconstructor(readonly conflict: IdempotencyConflict) {\n\t\tsuper(`Idempotency key \"${conflict.idempotencyKey}\" conflicts with invocation ${conflict.existingInvocationId}: ${conflict.reasons.join(\", \")}`);\n\t\tthis.name = \"IdempotencyConflictError\";\n\t}\n}\n\nexport type ExternalCompletionRefusal =\n\t| \"still_executing\"\n\t| \"not_found\"\n\t| \"not_awaiting\"\n\t| \"immediate_contract\"\n\t| \"reference_mismatch\"\n\t| \"provider_mismatch\"\n\t| \"invalid_completion\"\n\t| \"result_invalid\";\n\n/**\n * Why a completion was not applied, typed so a webhook handler can answer\n * the external system correctly: `retryable` means the invocation is still\n * being finalized and the same callback will be accepted once it parks, so\n * answer with something the sender retries; anything else is permanent and\n * a retry will get the same refusal.\n */\nexport class ExternalCompletionError extends Error {\n\treadonly code = \"EXTERNAL_COMPLETION_REFUSED\" as const;\n\tconstructor(readonly refusal: ExternalCompletionRefusal, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"ExternalCompletionError\";\n\t}\n\tget retryable(): boolean {\n\t\treturn this.refusal === \"still_executing\";\n\t}\n}\n\nexport interface PendingAssetEvent {\n\teventType: string;\n\tsubjectType: string;\n\tsubjectId: string;\n\tpayload: unknown;\n\teventSchemaVersion?: number;\n}\n\nexport interface ActionInvocationRecord {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tactionId: ActionId;\n\tactionVersion: number;\n\tactorId: string;\n\tactorType: ActorType;\n\tstatus: ActionStatus;\n\tparameters: Record<string, unknown>;\n\tresult: Record<string, unknown>;\n\tcorrelationId: string;\n\tcausationId?: string;\n\tidempotencyKey?: string;\n\tparameterDigest?: string;\n\tparameterDigestAlgorithm?: \"fabric-canonical-json-sha256-v1\";\n\tidempotencyActorId?: string;\n\tidempotencyAuthorizationBindingId?: string;\n\tprovenance?: Omit<InvocationProvenance, \"traceAttributes\">;\n\tauthorizationBinding?: AuthorizationBinding;\n\texecutionReason?: ActionExecutionReason;\n\tauthorizationReconciliation?: AuthorizationReconciliationOutcome;\n\t/** Durable evidence when an adapter returned an ambiguous outcome requiring reconciliation. */\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/**\n\t * A handoff the host is waiting on. While present the invocation is\n\t * `running` without a lease: it is not stuck, it is somebody else's turn,\n\t * and the recovery worker must not re-execute it.\n\t */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** The completion an external system delivered, kept so a repeat is recognised and a contradiction is caught. */\n\texternalCompletion?: RecordedExternalCompletion;\n\t/** Opaque, non-secret reference used to revalidate delegated execution authority. */\n\tauthorizationBindingId?: string;\n\tattemptCount: number;\n\tleaseOwner?: string;\n\tleaseExpiresAt?: Date;\n\t/** Monotonic claim generation used to reject writes from expired workers. */\n\tleaseToken?: number;\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n\thitlReason?: string;\n\thitlPolicyVersion?: string;\n\tapprovalDecision?: PersistedActionApprovalDecision;\n\tmutationFootprint?: MutationFootprint;\n\texecutionPrincipal?: ExecutionPrincipal;\n\truntimeEvidence?: GovernanceRuntimeEvidence;\n\terror?: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface AuthorizationReconciliationOutcome {\n\tkind: \"authorization_expired\" | \"authorization_denied\" | \"authorization_missing_capture_evidence\";\n\tgoverningMoment: AuthorizationGoverningMoment;\n\texecutionReason: ActionExecutionReason;\n\tauthorizationBindingId?: string;\n\tprovenance?: Omit<InvocationProvenance, \"traceAttributes\">;\n\tmessage: string;\n}\n\nexport interface HitlDecisionEvidence {\n\troute: AgentActionRoute;\n\triskTier: AgentActionRiskTier;\n\treason: string;\n\tpolicyVersion?: string;\n\tevaluatedAt: Date;\n}\n\nexport interface ActionApprovalDecision {\n\tapproved: boolean;\n\tapproverId: string;\n\tapproverType: ActorType;\n\treason?: string;\n\teditsReference?: string;\n\tdecidedAt?: Date;\n}\n\nexport interface PersistedActionApprovalDecision\n\textends Omit<ActionApprovalDecision, \"decidedAt\"> {\n\tdecidedAt: Date;\n}\n\nexport interface PolicyEvaluationRecord {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\toutcome: PolicyOutcome;\n\tcreatedAt: Date;\n}\n\nexport interface PolicyObligationRecord extends PolicyObligation {\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface ExecutionAttestationRecord extends ExecutionAttestation {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tadapterInvocationId?: string;\n\trecordedAt: Date;\n}\n\nexport interface ExternalReconciliationRecord extends ExternalReconciliation {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n}\n\nexport interface PendingExternalCompletion {\n\tprovider: string;\n\tadapterType: string;\n\toperation: string;\n\tadapterInvocationId: string;\n\texternalReference: string;\n\tacceptedAt: Date;\n\t/** Past this instant the host moves the invocation to reconciliation. */\n\tdueAt?: Date;\n\t/**\n\t * Set when the invocation finished executing and parked. A handoff is\n\t * recorded before the remaining steps run, so until this is set a\n\t * completion has nothing settled to settle into; it is asked to retry.\n\t */\n\tparkedAt?: Date;\n}\n\n/**\n * What an external system reports when it finishes work the host accepted.\n *\n * Matched to the invocation by `externalReference`, never by guesswork: a\n * completion that names a reference the invocation is not waiting on is\n * refused, because completing the wrong invocation is worse than dropping a\n * callback.\n */\nexport interface ExternalCompletion {\n\texternalReference: string;\n\toutcome: \"completed\" | \"failed\";\n\t/** Merged over the handler's result on completion. */\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\tprovider?: string;\n\tevidenceReferences?: EvidencePacketReference[];\n\tobservedAt: Date | string;\n}\n\nexport interface RecordedExternalCompletion extends ExternalCompletion {\n\trecordedAt: Date;\n\t/**\n\t * Canonical digest of provider, reference, outcome, result, error, and\n\t * evidence. A repeat with the same digest is the same news; a repeat with\n\t * the same outcome and a different digest is changed evidence, and is a\n\t * contradiction like a flipped outcome. Observation time is left out,\n\t * since a redelivery legitimately carries a new one.\n\t */\n\tdigest: string;\n}\n\nexport interface ReconcileOverdueCompletionsInput {\n\ttenantId?: string;\n\tspaceId?: string;\n\tlimit?: number;\n\tnow?: Date;\n}\n\nexport type AdapterInvocationStatus = \"running\" | \"succeeded\" | \"failed\" | \"ambiguous\";\n\nexport interface AdapterReconciliationOutcome {\n\tkind: \"adapter_outcome_ambiguous\";\n\tadapterType: string;\n\toperation: string;\n\tvendor: string;\n\tadapterInvocationId: string;\n\treason?: string;\n\t/** Opaque, non-secret reference to external operation state for reconciliation. */\n\texternalReference?: string;\n\tmessage: string;\n}\n\nexport interface AdapterInvocationRecord {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tadapterType: string;\n\toperation: string;\n\tvendor: string;\n\tstatus: AdapterInvocationStatus;\n\tinput: Record<string, unknown>;\n\toutput?: Record<string, unknown>;\n\terror?: string;\n\tattempt: number;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface CreateActionInvocationInput\n\textends Omit<\n\t\tActionInvocationRecord,\n\t\t\"createdAt\" | \"updatedAt\" | \"attemptCount\" | \"leaseOwner\" | \"leaseExpiresAt\" | \"leaseToken\"\n\t> {}\n\nexport interface PlatformHostStore<TDb> {\n\treadonly db: TDb;\n\t/**\n\t * Run against the store's domain handle. This base seam does not promise a\n\t * database transaction. Use `transactionWithEvents` when domain writes,\n\t * canonical events, and invocation state must commit atomically.\n\t */\n\ttransaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult>;\n\tcreateActionInvocation(input: CreateActionInvocationInput): Promise<ActionInvocationRecord>;\n\tgetActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined>;\n\tupdateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void>;\n\tappendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void>;\n\tcreateAdapterInvocation(record: AdapterInvocationRecord): Promise<void>;\n\tgetAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined>;\n\tupdateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void>;\n\tappendEvent(event: AssetEventEnvelope): Promise<void>;\n\tnextEventSequence(tenantId: string, spaceId: string): Promise<number>;\n\tgetEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined>;\n}\n\n/**\n * Transaction-scoped Host operations used to commit domain writes and their\n * canonical events as one unit of work.\n *\n * The supplied `db` must be bound to the same database transaction as every\n * lifecycle method on this object. Implementations must roll the whole unit\n * back when `run` throws.\n */\nexport interface PlatformHostMutationTransaction<TDb> {\n\treadonly db: TDb;\n\t/**\n\t * Read and lock an invocation until this transaction completes.\n\t * Required by serialized saga parent lifecycle transitions.\n\t */\n\tgetActionInvocationForUpdate?(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined>;\n\t/**\n\t * Read one event by its stable identity inside the transaction.\n\t * Required by serialized saga parent lifecycle transitions.\n\t */\n\tgetEvent?(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<AssetEventEnvelope | undefined>;\n\tappendEvent(event: AssetEventEnvelope): Promise<void>;\n\tappendEventWithOutbox?(\n\t\tevent: AssetEventEnvelope,\n\t\tmetadata: OutboxEventMetadata,\n\t): Promise<void>;\n\tnextEventSequence(tenantId: string, spaceId: string): Promise<number>;\n\tlistEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]>;\n\tgetEntityState?(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined>;\n\tupdateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void>;\n\tupdateLeasedActionInvocation?(\n\t\tinput: UpdateLeasedActionInvocationInput,\n\t): Promise<boolean>;\n}\n\nexport type OutboxStatus = \"pending\" | \"published\" | \"dead_letter\";\nexport type EventPayloadClassification = \"public\" | \"internal\" | \"confidential\" | \"restricted\";\n\nexport interface OutboxEventMetadata {\n\tproducerModuleVersion: string;\n\tpayloadClassification: EventPayloadClassification;\n\ttraceContext?: Record<string, string>;\n\tincludeProvenance?: boolean;\n}\n\nexport interface EnterpriseEventEnvelope {\n\teventId: string;\n\teventType: string;\n\teventSchemaVersion: number;\n\ttenantId: string;\n\tspaceId: string;\n\tsubjectType: string;\n\tsubjectId: string;\n\tsequence: number;\n\tactionInvocationId?: string;\n\tcorrelationId: string;\n\tcausationId?: string;\n\toccurredAt: Date;\n\trecordedAt: Date;\n\tproducerModuleVersion: string;\n\tpayloadClassification: EventPayloadClassification;\n\ttraceContext?: Record<string, string>;\n\tprovenance?: { source: InvocationSource; auditAttributes?: NamespacedAttributes };\n\t/** Present only for events an action declaring provisional consistency emitted. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\tpayload: unknown;\n}\n\nexport interface OutboxRecord {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tevent: EnterpriseEventEnvelope;\n\tstatus: OutboxStatus;\n\tattemptCount: number;\n\tavailableAt: Date;\n\tleaseOwner?: string;\n\tleaseExpiresAt?: Date;\n\tleaseToken?: number;\n\tlastError?: string;\n\tcreatedAt: Date;\n\tpublishedAt?: Date;\n}\n\nexport interface ClaimOutboxInput {\n\tworkerId: string;\n\tleaseDurationMs: number;\n\tlimit?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: Date;\n}\n\nexport interface OutboxPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\t/** True only when transactionWithEvents supplies appendEventWithOutbox in the same unit of work. */\n\treadonly transactionalOutbox?: boolean;\n\tappendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void>;\n\tclaimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]>;\n\tmarkOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void>;\n\tmarkOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void>;\n\trenewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean>;\n\tlistOutbox(input?: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] }): Promise<OutboxRecord[]>;\n}\n\n/**\n * Optional production capability for atomic domain/event persistence.\n *\n * A mutating Host action uses this capability when available. Stores that do\n * not implement it retain the legacy transaction boundary for compatibility,\n * but cannot claim atomic domain-write/event persistence.\n */\nexport interface AtomicMutationPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\ttransactionWithEvents<TResult>(\n\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t): Promise<TResult>;\n}\n\nexport interface BeginApprovalDecisionInput {\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tdecision: PersistedActionApprovalDecision;\n\tleaseOwner: string;\n\tleaseDurationMs: number;\n\tnow: Date;\n}\n\nexport interface ApprovalDecisionTransitionResult {\n\tapplied: boolean;\n\tinvocation?: ActionInvocationRecord;\n}\n\n/** Optional store capability required only when agent HITL or approval resume is used. */\nexport interface ApprovalPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\trecordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord>;\n\tbeginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult>;\n}\n\n/** Optional durable capabilities used when external-governance enrichment is configured. */\nexport interface GovernancePlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\trecordMutationGovernance(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcontext: { footprint: MutationFootprint; executionPrincipal: ExecutionPrincipal },\n\t): Promise<ActionInvocationRecord>;\n\tappendPolicyObligations(records: PolicyObligationRecord[]): Promise<void>;\n\tlistPolicyObligations(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<PolicyObligationRecord[]>;\n\tupdatePolicyObligation(\n\t\tactionInvocationId: string,\n\t\tobligationId: string,\n\t\tstatus: PolicyObligationStatus,\n\t\tevidenceReferences?: PolicyObligation[\"evidenceReferences\"],\n\t): Promise<void>;\n\tappendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void>;\n\tlistExecutionAttestations(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ExecutionAttestationRecord[]>;\n\tappendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void>;\n}\n\nexport interface ListActionInvocationsInput {\n\ttenantId?: string;\n\tspaceId?: string;\n\tstatuses?: readonly ActionStatus[];\n\tupdatedBefore?: Date;\n\t/** Only invocations holding a pending external completion. */\n\tawaitingCompletion?: boolean;\n\t/** Only pending completions due at or before this instant. Implies `awaitingCompletion`. */\n\tcompletionDueBefore?: Date;\n\t/** Only invocations no worker holds a lease on. */\n\tunleased?: boolean;\n\tlimit?: number;\n}\n\nexport interface ClaimActionInvocationsInput {\n\tworkerId: string;\n\tleaseDurationMs: number;\n\tlimit?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: Date;\n}\n\n/**\n * What the host writes back to an invocation.\n *\n * Store obligations for `pendingCompletion`, which a custom store must honour\n * or the recovery worker will re-run an external handoff:\n * - a patch that sets `pendingCompletion` together with `status: \"running\"`\n * parks the invocation and must clear its lease;\n * - a patch that sets `pendingCompletion` without a status records the handoff\n * and must leave the lease alone;\n * - a patch with `pendingCompletion: undefined` clears it;\n * - `claimActionInvocations` must never claim a running invocation without a\n * lease, which is what a parked invocation is.\n */\nexport type ActionInvocationPatch = Partial<\n\tPick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\" | \"pendingCompletion\" | \"externalCompletion\">\n>;\n\nexport interface UpdateLeasedActionInvocationInput {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tworkerId: string;\n\tleaseToken: number;\n\tpatch: ActionInvocationPatch;\n}\n\nexport interface RenewActionInvocationLeaseInput {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tworkerId: string;\n\tleaseToken: number;\n\tleaseDurationMs: number;\n\tnow?: Date;\n}\n\n/** Store capabilities required by the durable polling worker and operator tooling. */\nexport interface RecoverablePlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\tlistActionInvocations(input?: ListActionInvocationsInput): Promise<ActionInvocationRecord[]>;\n\tclaimActionInvocations(input: ClaimActionInvocationsInput): Promise<ActionInvocationRecord[]>;\n\tupdateLeasedActionInvocation(input: UpdateLeasedActionInvocationInput): Promise<boolean>;\n\trenewActionInvocationLease(input: RenewActionInvocationLeaseInput): Promise<boolean>;\n\tlistEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]>;\n}\n\nexport interface ActionAuthorizationInput {\n\tactionId: ActionId;\n\tnamespace: string;\n\trequiredPermissions: readonly string[];\n\trequiredRoles: readonly string[];\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n}\n\nexport type KnownActionExecutionReason = \"initial\" | \"approval_resume\" | \"recovery\" | \"offline_replay\";\nexport type ActionExecutionReason = KnownActionExecutionReason | (string & {});\n\n/**\n * Trusted execution-boundary authorization input.\n *\n * Parameters are the schema-parsed durable parameters, never caller-supplied\n * transient values. `invocation` is the canonical record that will execute.\n */\nexport interface ActionExecutionAuthorizationInput extends ActionAuthorizationInput {\n\tactionInvocationId: string;\n\tparameters: unknown;\n\tinvocation: Readonly<ActionInvocationRecord>;\n\texecutionReason: ActionExecutionReason;\n}\n\nexport interface PlatformHostAuthorization {\n\tcheckEntitlement(input: ActionAuthorizationInput): Promise<boolean>;\n\tauthorize(input: ActionAuthorizationInput): Promise<boolean>;\n\t/**\n\t * Optional final authorization immediately before policies and mutation\n\t * execution. When absent, the Host reuses `authorize` at this boundary.\n\t */\n\tauthorizeExecution?(input: ActionExecutionAuthorizationInput): Promise<boolean>;\n\t/** Optional distinct authorization boundary for human/system approval decisions. */\n\tauthorizeApproval?(\n\t\tinput: ActionAuthorizationInput & { decision: ActionApprovalDecision },\n\t): Promise<boolean>;\n}\n\nexport interface DispatchActionInput {\n\tactionInvocationId: string;\n\tactionId: ActionId;\n\ttenantId: string;\n\tspaceId: string;\n\tworkflowId: string;\n}\n\nexport interface DispatchActionResult {\n\tworkflowId: string;\n\trunId?: string;\n}\n\nexport interface PlatformActionDispatcher {\n\tdispatch(input: DispatchActionInput): Promise<DispatchActionResult>;\n}\n\nexport interface SubmitActionInput {\n\tactionId: ActionId;\n\tparameters: Record<string, unknown>;\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n\tcorrelationId?: string;\n\tcausationId?: string;\n\tprovenance?: InvocationProvenance;\n\texecutionReason?: Extract<KnownActionExecutionReason, \"initial\" | \"offline_replay\">;\n\t/** Stable logical command key. Reusing it returns the original invocation; a pending failed dispatch may retry its stable workflow ID. */\n\tidempotencyKey?: string;\n\t/** Opaque, non-secret authorization/admission reference persisted with the invocation. */\n\tauthorizationBindingId?: string;\n\tauthorizationBinding?: AuthorizationBinding;\n}\n\nexport interface SubmitActionResult {\n\tactionInvocationId: string;\n\tstatus: ActionStatus;\n\tworkflowId: string;\n\trunId?: string;\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\treconciliation?: AuthorizationReconciliationOutcome;\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/** Present while the invocation waits for an external system to complete it. */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** Mirrors the action's declared consistency so a caller knows whether the result is settled. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n}\n\nexport interface ExecuteActionResult {\n\tactionInvocationId: string;\n\tstatus: ActionStatus;\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\treconciliation?: AuthorizationReconciliationOutcome;\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/** Present while the invocation waits for an external system to complete it. */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** Mirrors the action's declared consistency so a caller knows whether the result is settled. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n}\n\nexport interface ExecuteInvocationOptions {\n\t/** Required when executing a row already protected by a worker or approval-resume lease. */\n\tleaseOwner?: string;\n\t/** Claim generation paired with leaseOwner; stale generations are rejected. */\n\tleaseToken?: number;\n}\n\nexport interface PlatformActionWorkerOptions<TDb> {\n\thost: GovernedActionHost;\n\tstore: RecoverablePlatformHostStore<TDb>;\n\tworkerId: string;\n\tbatchSize?: number;\n\tleaseDurationMs?: number;\n\tleaseRenewalIntervalMs?: number;\n\tpollIntervalMs?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tsignal?: AbortSignal;\n\tonError?: (error: unknown, invocation?: ActionInvocationRecord) => void;\n\ttelemetry?: PlatformHostTelemetry;\n\t/**\n\t * Sweep overdue external handoffs each cycle. Defaults to on. Turn it off\n\t * for a store without the governance seam, where the sweep would refuse\n\t * on every cycle, and run the sweep elsewhere.\n\t */\n\tsweepOverdueCompletions?: boolean;\n}\n\nexport interface PlatformActionWorkerCycleResult {\n\tclaimed: number;\n\tcompleted: number;\n\tfailed: number;\n\t/** Present when claimed agent work was durably parked instead of failing. */\n\twaitingForApproval?: number;\n}\n\nexport interface PlatformHostOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\tauthorization: PlatformHostAuthorization;\n\t/** Preferred explicit catalog assembled from this runtime's Fabric modules. */\n\tregistry?: Pick<ModuleRegistry<TDb>, \"resolveAction\" | \"resolvePolicy\" | \"resolveStateMachine\"> &\n\t\tPartial<Pick<ModuleRegistry<TDb>, \"orderedModules\">>;\n\t/** Resolve vertical- or runtime-local actions without mutating the process-wide registry. */\n\tresolveAction?: (actionId: ActionId) => ActionDefinition<TDb> | undefined;\n\tadapters?: readonly AdapterImplementation[];\n\tdispatcher?: PlatformActionDispatcher;\n\tservices?: FabricRuntimeServices;\n\tidempotency?: {\n\t\tconflictMode?: \"audit-only\" | \"enforce\";\n\t\tonConflict?(conflict: IdempotencyConflict): void;\n\t\tonLegacyRecord?(invocation: ActionInvocationRecord): void;\n\t};\n\tprovenance?: {\n\t\tauditAttributeAllowlist?: readonly string[];\n\t\tmaxAttributes?: number;\n\t\tmaxValueLength?: number;\n\t\tredactAuditAttributes?(attributes: NamespacedAttributes): NamespacedAttributes;\n\t\tonTrace?(provenance: InvocationProvenance): void;\n\t};\n\t/** Requires an outbox-capable store; every canonical event is then appended with delivery state. */\n\toutbox?: {\n\t\tproducerModuleVersion(actionId: ActionId, actionVersion: number): string;\n\t\tclassifyPayload(event: AssetEventEnvelope): EventPayloadClassification;\n\t\tincludeProvenance?(event: AssetEventEnvelope, classification: EventPayloadClassification): boolean;\n\t\ttraceContext?(event: AssetEventEnvelope): Record<string, string> | undefined;\n\t\t/** Host lifecycle events are excluded by default; opt in only after making their payload audit-safe. */\n\t\tshouldPublish?(event: AssetEventEnvelope): boolean;\n\t};\n\t/** Optional vertical-owned evaluator. When absent, agent behavior is unchanged. */\n\thitlEvaluator?: AgentActionPolicyEvaluator;\n\t/** Durable evaluator/ruleset version recorded with every HITL decision. */\n\thitlPolicyVersion?: string;\n\t/** Optional portable resolver; provider-specific implementations belong in integration packages. */\n\tresolveMutationGovernance?: MutationGovernanceResolver;\n\t/** Translate policy outcomes into durable, enforceable obligations. */\n\tresolvePolicyObligations?: (\n\t\toutcomes: readonly PolicyOutcome[],\n\t) => Promise<PolicyObligation[]> | PolicyObligation[];\n\t/** Translate a successful adapter result into audit-safe external execution evidence. */\n\textractExecutionAttestation?: (input: {\n\t\tactionInvocationId: string;\n\t\tadapterInvocationId: string;\n\t\tadapterType: string;\n\t\toperation: string;\n\t\tvendor: string;\n\t\t/** Audit-safe adapter input after redactAdapterInput has been applied. */\n\t\tinput: Record<string, unknown>;\n\t\tstartedAt: Date;\n\t\tcompletedAt: Date;\n\t\toutput: Record<string, unknown>;\n\t}) => Promise<ExecutionAttestation | undefined> | ExecutionAttestation | undefined;\n\t/** Package/provider/ruleset generations persisted with every newly created invocation. */\n\truntimeEvidence?: Partial<GovernanceRuntimeEvidence>;\n\t/**\n\t * Trusted composition identity attached by the Host configuration, never\n\t * accepted directly from submission input. Requires an explicit registry;\n\t * its module namespaces and versions are checked against these identities.\n\t */\n\tcomposition?: {\n\t\tassembly: AssemblyLockfile;\n\t\tresolveInitiatingReleaseDigest?(\n\t\t\tinput: SubmitActionInput,\n\t\t): Promise<string | undefined> | string | undefined;\n\t};\n\t/** Lease held while an approved invocation resumes; defaults to five minutes. */\n\tapprovalResumeLeaseDurationMs?: number;\n\t/** Remove forbidden/sensitive fields before durable invocation persistence. */\n\tredactActionParameters?: (\n\t\tactionId: ActionId,\n\t\tparameters: Record<string, unknown>,\n\t) => Record<string, unknown>;\n\tresolvePolicies?: (\n\t\tinput: ActionAuthorizationInput & { declaredPolicyIds: readonly string[] },\n\t) => Promise<RuntimePolicyDefinition[]>;\n\textractEvents?: (data: Record<string, unknown>) => PendingAssetEvent[];\n\t/** Handler-result fields consumed by extractEvents and omitted from the durable result. */\n\teventResultFields?: readonly string[];\n\tredactAdapterInput?: (\n\t\tactionId: ActionId,\n\t\tadapterType: string,\n\t\toperation: string,\n\t\tinput: Record<string, unknown>,\n\t) => Record<string, unknown>;\n\tadapterEventSubject?: (\n\t\tactionId: ActionId,\n\t\tparameters: unknown,\n\t\thandlerResult: Record<string, unknown>,\n\t) => { subjectType: string; subjectId: string } | undefined;\n\tnow?: () => Date;\n\t/** Vendor-neutral lifecycle and metric sink. Telemetry is best effort. */\n\ttelemetry?: PlatformHostTelemetry;\n\t/**\n\t * Epoch-millis deadline delivered to every adapter execution context.\n\t * When omitted, no deadline is set and adapters receive no AbortSignal.\n\t */\n\tadapterDeadlineMs?: number;\n}\n\nexport interface GovernedActionHost {\n\tsubmitAction(input: SubmitActionInput): Promise<SubmitActionResult>;\n\texecuteInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\toptions?: ExecuteInvocationOptions,\n\t): Promise<ExecuteActionResult>;\n\tresumeApprovedInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: ActionApprovalDecision,\n\t): Promise<ExecuteActionResult>;\n\trecordExecutionAttestation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tattestation: ExecutionAttestation,\n\t): Promise<void>;\n\trecordExternalReconciliation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\treconciliation: ExternalReconciliation,\n\t): Promise<void>;\n\t/**\n\t * Complete an invocation an adapter handed off, by the reference the\n\t * external system was given. Idempotent for a repeated identical\n\t * completion; a contradictory one moves the invocation to reconciliation.\n\t */\n\tcompleteExternalInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcompletion: ExternalCompletion,\n\t): Promise<ExecuteActionResult>;\n\t/**\n\t * Move handoffs past their deadline to `reconciliation_required`, so a\n\t * callback that never comes is a finding and not a silent wait. The\n\t * pending handoff is kept, so a late completion can still land.\n\t */\n\treconcileOverdueCompletions(input?: ReconcileOverdueCompletionsInput): Promise<{ overdue: string[] }>;\n}\n","import { createHash } from \"node:crypto\";\nimport type { InvocationProvenance, InvocationSource, PlatformHostOptions } from \"./types\";\n\nexport const PARAMETER_DIGEST_ALGORITHM = \"fabric-canonical-json-sha256-v1\" as const;\n\nexport function canonicalJson(value: unknown): string {\n\treturn JSON.stringify(sort(value));\n}\n\nfunction sort(value: unknown): unknown {\n\tif (Array.isArray(value)) return value.map(sort);\n\tif (value && typeof value === \"object\") {\n\t\treturn Object.fromEntries(Object.entries(value as Record<string, unknown>)\n\t\t\t.sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0)\n\t\t\t.map(([key, child]) => [key, sort(child)]));\n\t}\n\treturn value;\n}\n\nexport function digestParameters(parameters: unknown): string {\n\treturn createHash(\"sha256\").update(canonicalJson(parameters)).digest(\"hex\");\n}\n\nconst ATTRIBUTE_NAME = /^[a-z][a-z0-9-]*(?:\\.[A-Za-z][A-Za-z0-9_-]*)+$/;\nconst INVOCATION_SOURCE = /^(?:ui|sdui|api|agent|worker|system|[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+)$/;\n\nexport function normalizeProvenance(\n\tinput: InvocationProvenance | undefined,\n\toptions: PlatformHostOptions<unknown>[\"provenance\"],\n): Omit<InvocationProvenance, \"traceAttributes\"> | undefined {\n\tif (!input) return undefined;\n\tif (!INVOCATION_SOURCE.test(input.source)) throw new Error(`Invalid invocation provenance source: ${input.source}`);\n\tconst maxAttributes = options?.maxAttributes ?? 16;\n\tconst maxValueLength = options?.maxValueLength ?? 256;\n\tconst allowlist = new Set(options?.auditAttributeAllowlist ?? []);\n\tconst validate = (attributes: Record<string, string> | undefined, durable: boolean) => {\n\t\tif (!attributes) return undefined;\n\t\tconst entries = Object.entries(attributes);\n\t\tif (entries.length > maxAttributes) throw new Error(`Invocation provenance exceeds ${maxAttributes} attributes.`);\n\t\tfor (const [key, value] of entries) {\n\t\t\tif (!ATTRIBUTE_NAME.test(key)) throw new Error(`Invalid provenance attribute name: ${key}`);\n\t\t\tif (value.length > maxValueLength) throw new Error(`Invocation provenance attribute \"${key}\" exceeds ${maxValueLength} characters.`);\n\t\t\tif (durable && !allowlist.has(key)) throw new Error(`Audit provenance attribute \"${key}\" is not allowlisted.`);\n\t\t}\n\t\treturn Object.fromEntries(entries);\n\t};\n\tvalidate(input.traceAttributes, false);\n\tconst redactedAuditAttributes = input.auditAttributes\n\t\t? options?.redactAuditAttributes?.({ ...input.auditAttributes }) ?? input.auditAttributes\n\t\t: undefined;\n\tconst auditAttributes = validate(redactedAuditAttributes, true);\n\toptions?.onTrace?.({\n\t\t...input,\n\t\t...(auditAttributes ? { auditAttributes } : { auditAttributes: undefined }),\n\t});\n\treturn {\n\t\tsource: input.source,\n\t\tcorrelationId: input.correlationId,\n\t\t...(input.causationId ? { causationId: input.causationId } : {}),\n\t\t...(auditAttributes ? { auditAttributes } : {}),\n\t};\n}\n","import type {\n\tActionInvocationRecord,\n\tOutboxPlatformHostStore,\n\tPlatformHostStore,\n\tRecoverablePlatformHostStore,\n} from \"./types\";\n\n/** Version of the vendor-neutral health/readiness contract. */\nexport const PLATFORM_HOST_HEALTH_CONTRACT_VERSION = 1 as const;\n\n/**\n * Stable metric names. Adapters may translate these names to a vendor's\n * naming convention, but applications should not derive names from labels.\n */\nexport const PLATFORM_HOST_METRIC_NAMES = {\n\tworkerCyclesStarted: \"fabric.platform.worker.cycles.started\",\n\tworkerCyclesCompleted: \"fabric.platform.worker.cycles.completed\",\n\tworkerCyclesFailed: \"fabric.platform.worker.cycles.failed\",\n\tinvocationSubmitted: \"fabric.platform.invocation.submitted\",\n\tinvocationExecutionStarted: \"fabric.platform.invocation.execution_started\",\n\tinvocationLeaseClaimed: \"fabric.platform.invocation.lease_claimed\",\n\tinvocationCompleted: \"fabric.platform.invocation.completed\",\n\tinvocationFailed: \"fabric.platform.invocation.failed\",\n\tinvocationPolicyBlocked: \"fabric.platform.invocation.policy_blocked\",\n\tinvocationValidationFailed: \"fabric.platform.invocation.validation_failed\",\n\tinvocationApprovalWaited: \"fabric.platform.invocation.approval_waited\",\n\tinvocationReconciliationRequired: \"fabric.platform.invocation.reconciliation_required\",\n\toutboxRelayCyclesStarted: \"fabric.platform.outbox.relay_cycles.started\",\n\toutboxRelayCyclesCompleted: \"fabric.platform.outbox.relay_cycles.completed\",\n\toutboxRelayCyclesFailed: \"fabric.platform.outbox.relay_cycles.failed\",\n\toutboxLeaseClaimed: \"fabric.platform.outbox.lease_claimed\",\n\toutboxPublished: \"fabric.platform.outbox.published\",\n\toutboxFailed: \"fabric.platform.outbox.failed\",\n\toutboxDeadLettered: \"fabric.platform.outbox.dead_lettered\",\n\tinvocationBacklog: \"fabric.platform.invocation.backlog\",\n\tinvocationRunning: \"fabric.platform.invocation.running\",\n\tinvocationExpiredLeases: \"fabric.platform.invocation.expired_leases\",\n\tinvocationApprovalWaits: \"fabric.platform.invocation.approval_waits\",\n\tinvocationReconciliationRequiredGauge: \"fabric.platform.invocation.reconciliation_required.count\",\n\toutboxBacklog: \"fabric.platform.outbox.backlog\",\n\toutboxExpiredLeases: \"fabric.platform.outbox.expired_leases\",\n\toutboxDeadLetters: \"fabric.platform.outbox.dead_letters\",\n} as const;\n\nexport type PlatformHostMetricName =\n\t(typeof PLATFORM_HOST_METRIC_NAMES)[keyof typeof PLATFORM_HOST_METRIC_NAMES];\n\nexport type PlatformHostTelemetryEventName =\n\t| \"worker.cycle.started\"\n\t| \"worker.cycle.completed\"\n\t| \"worker.cycle.failed\"\n\t| \"invocation.submitted\"\n\t| \"invocation.execution_started\"\n\t| \"invocation.lease_claimed\"\n\t| \"invocation.completed\"\n\t| \"invocation.failed\"\n\t| \"invocation.policy_blocked\"\n\t| \"invocation.validation_failed\"\n\t| \"invocation.approval_waited\"\n\t| \"invocation.reconciliation_required\"\n\t| \"outbox.relay.started\"\n\t| \"outbox.relay.completed\"\n\t| \"outbox.relay.failed\"\n\t| \"outbox.lease_claimed\"\n\t| \"outbox.published\"\n\t| \"outbox.failed\"\n\t| \"outbox.dead_lettered\";\n\nexport type PlatformHostMetricType = \"counter\" | \"gauge\";\nexport type PlatformHostTelemetryAttribute = string | number | boolean;\n\nexport interface PlatformHostLifecycleTelemetry {\n\tkind: \"event\";\n\tname: PlatformHostTelemetryEventName;\n\tmetricName: PlatformHostMetricName;\n\tmetricType: \"counter\";\n\toccurredAt: Date;\n\ttenantId?: string;\n\tspaceId?: string;\n\tattributes?: Readonly<Record<string, PlatformHostTelemetryAttribute>>;\n}\n\nexport interface PlatformHostMetricTelemetry {\n\tkind: \"metric\";\n\tname: PlatformHostMetricName;\n\tmetricType: PlatformHostMetricType;\n\tvalue: number;\n\tobservedAt: Date;\n\ttenantId?: string;\n\tspaceId?: string;\n}\n\nexport type PlatformHostTelemetryRecord =\n\t| PlatformHostLifecycleTelemetry\n\t| PlatformHostMetricTelemetry;\n\nexport type PlatformHostTelemetryHook = (\n\trecord: PlatformHostTelemetryRecord,\n) => void | Promise<void>;\n\n/**\n * A deliberately small sink contract. No OpenTelemetry, Prometheus, or\n * vendor SDK is required by Platform Host.\n */\nexport type PlatformHostTelemetry =\n\t| PlatformHostTelemetryHook\n\t| { record: PlatformHostTelemetryHook };\n\nexport type PlatformHostTelemetryInput =\n\t| Omit<PlatformHostLifecycleTelemetry, \"occurredAt\" | \"metricType\"> & { occurredAt?: Date }\n\t| Omit<PlatformHostMetricTelemetry, \"observedAt\"> & { observedAt?: Date };\n\n/**\n * Telemetry is best effort and must never change governed mutation behavior.\n * Promise-returning hooks are detached and rejected hooks are swallowed.\n */\nexport function emitPlatformHostTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tinput: PlatformHostTelemetryInput,\n): void {\n\tif (!telemetry) return;\n\tconst record = input.kind === \"event\"\n\t\t? { ...input, metricType: \"counter\" as const, occurredAt: input.occurredAt ?? new Date() }\n\t\t: { ...input, observedAt: input.observedAt ?? new Date() };\n\ttry {\n\t\tconst result = typeof telemetry === \"function\"\n\t\t\t? telemetry(record)\n\t\t\t: telemetry.record(record);\n\t\tif (isPromiseLike(result)) void result.catch(() => undefined);\n\t} catch {\n\t\t// Observability outages must not fail a mutation or worker checkpoint.\n\t}\n}\n\nexport interface PlatformHostHealthQuery {\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow: Date;\n}\n\nexport interface PlatformHostHealthCounts {\n\tinvocationBacklog: number;\n\tinvocationRunning: number;\n\tinvocationExpiredLeases: number;\n\tinvocationApprovalWaits: number;\n\tinvocationReconciliationRequired: number;\n\toutboxBacklog: number;\n\toutboxExpiredLeases: number;\n\toutboxDeadLetters: number;\n}\n\nexport interface PlatformHostWorkerHealthInput {\n\tlastHeartbeatAt: Date;\n\tstaleAfterMs: number;\n}\n\nexport interface PlatformHostHealthOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: () => Date;\n\t/**\n\t * Worker liveness is supplied by the deployment's supervisor or telemetry\n\t * bridge. Only aggregate healthy/stale counts are returned.\n\t */\n\tworkers?: readonly PlatformHostWorkerHealthInput[];\n\ttelemetry?: PlatformHostTelemetry;\n}\n\nexport interface PlatformHostHealthStore<TDb> extends RecoverablePlatformHostStore<TDb> {\n\tgetHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts>;\n}\n\nexport type PlatformHostHealthStatus = \"healthy\" | \"degraded\" | \"unhealthy\";\n\nexport interface PlatformHostHealthSnapshot {\n\tcontractVersion: typeof PLATFORM_HOST_HEALTH_CONTRACT_VERSION;\n\tgeneratedAt: Date;\n\tscope: { tenantId?: string; spaceId?: string };\n\tdataAvailable: boolean;\n\tstatus: PlatformHostHealthStatus;\n\treadiness: {\n\t\tready: boolean;\n\t\treasonCodes: readonly PlatformHostReadinessReason[];\n\t};\n\tworkers: {\n\t\treported: number;\n\t\thealthy: number;\n\t\tstale: number;\n\t};\n\tinvocations: {\n\t\tbacklog: number;\n\t\trunning: number;\n\t\texpiredLeases: number;\n\t\tapprovalWaits: number;\n\t\treconciliationRequired: number;\n\t};\n\toutbox: {\n\t\tbacklog: number;\n\t\texpiredLeases: number;\n\t\tdeadLetters: number;\n\t};\n}\n\nexport type PlatformHostReadinessReason =\n\t| \"health_source_unavailable\"\n\t| \"workers_stale\"\n\t| \"invocation_expired_leases\"\n\t| \"outbox_expired_leases\"\n\t| \"outbox_dead_letters\"\n\t| \"reconciliation_required\";\n\n/**\n * Read tenant/space-scoped operational counts without returning invocation,\n * actor, parameter, error, event, or adapter data.\n */\nexport async function getPlatformHostHealthSnapshot<TDb>(\n\toptions: PlatformHostHealthOptions<TDb>,\n): Promise<PlatformHostHealthSnapshot> {\n\tconst generatedAt = options.now?.() ?? new Date();\n\tconst workerSummary = summarizeWorkers(options.workers ?? [], generatedAt);\n\tconst scope = {\n\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t};\n\n\ttry {\n\t\tconst counts = await readHealthCounts(options.store, {\n\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t\tnow: generatedAt,\n\t\t});\n\t\tconst snapshot = createHealthSnapshot(\n\t\t\tgeneratedAt,\n\t\t\tscope,\n\t\t\tcounts,\n\t\t\tworkerSummary,\n\t\t\ttrue,\n\t\t);\n\t\temitHealthMetrics(options.telemetry, snapshot);\n\t\treturn snapshot;\n\t} catch {\n\t\tconst snapshot = createHealthSnapshot(\n\t\t\tgeneratedAt,\n\t\t\tscope,\n\t\t\tzeroHealthCounts(),\n\t\t\tworkerSummary,\n\t\t\tfalse,\n\t\t);\n\t\temitHealthMetrics(options.telemetry, snapshot);\n\t\treturn snapshot;\n\t}\n}\n\nasync function readHealthCounts<TDb>(\n\tstore: PlatformHostStore<TDb>,\n\tquery: PlatformHostHealthQuery,\n): Promise<PlatformHostHealthCounts> {\n\tconst candidate = store as PlatformHostStore<TDb> & {\n\t\tgetHealthCounts?: (input: PlatformHostHealthQuery) => Promise<PlatformHostHealthCounts>;\n\t};\n\tif (typeof candidate.getHealthCounts === \"function\") {\n\t\treturn assertHealthCounts(await candidate.getHealthCounts(query));\n\t}\n\n\t// Compatibility fallback for custom stores that predate the aggregate seam.\n\tconst recoverable = store as Partial<RecoverablePlatformHostStore<TDb>>;\n\tconst outbox = store as Partial<OutboxPlatformHostStore<TDb>>;\n\tif (typeof recoverable.listActionInvocations !== \"function\") {\n\t\tthrow new Error(\"Health counts are not supported by this store.\");\n\t}\n\tconst invocations = await recoverable.listActionInvocations({\n\t\t...(query.tenantId ? { tenantId: query.tenantId } : {}),\n\t\t...(query.spaceId ? { spaceId: query.spaceId } : {}),\n\t\tlimit: Number.MAX_SAFE_INTEGER,\n\t});\n\tconst outboxRecords = typeof outbox.listOutbox === \"function\"\n\t\t? await outbox.listOutbox({\n\t\t\t...(query.tenantId ? { tenantId: query.tenantId } : {}),\n\t\t\t...(query.spaceId ? { spaceId: query.spaceId } : {}),\n\t\t})\n\t\t: [];\n\treturn countsFromRecords(invocations, outboxRecords, query.now);\n}\n\nfunction countsFromRecords(\n\tinvocations: readonly ActionInvocationRecord[],\n\toutbox: readonly { status: string; leaseExpiresAt?: Date }[],\n\tnow: Date,\n): PlatformHostHealthCounts {\n\treturn {\n\t\tinvocationBacklog: invocations.filter((item) => item.status === \"pending\").length,\n\t\tinvocationRunning: invocations.filter((item) => item.status === \"running\").length,\n\t\tinvocationExpiredLeases: invocations.filter((item) =>\n\t\t\titem.status === \"running\" &&\n\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\titem.leaseExpiresAt.getTime() <= now.getTime(),\n\t\t).length,\n\t\tinvocationApprovalWaits: invocations.filter((item) => item.status === \"waiting_for_approval\").length,\n\t\tinvocationReconciliationRequired: invocations.filter((item) => item.status === \"reconciliation_required\").length,\n\t\toutboxBacklog: outbox.filter((item) => item.status === \"pending\").length,\n\t\toutboxExpiredLeases: outbox.filter((item) =>\n\t\t\titem.status === \"pending\" &&\n\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\titem.leaseExpiresAt.getTime() <= now.getTime(),\n\t\t).length,\n\t\toutboxDeadLetters: outbox.filter((item) => item.status === \"dead_letter\").length,\n\t};\n}\n\nfunction assertHealthCounts(value: PlatformHostHealthCounts): PlatformHostHealthCounts {\n\tfor (const [name, count] of Object.entries(value)) {\n\t\tif (!Number.isSafeInteger(count) || count < 0) {\n\t\t\tthrow new Error(`Invalid health count: ${name}`);\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction zeroHealthCounts(): PlatformHostHealthCounts {\n\treturn {\n\t\tinvocationBacklog: 0,\n\t\tinvocationRunning: 0,\n\t\tinvocationExpiredLeases: 0,\n\t\tinvocationApprovalWaits: 0,\n\t\tinvocationReconciliationRequired: 0,\n\t\toutboxBacklog: 0,\n\t\toutboxExpiredLeases: 0,\n\t\toutboxDeadLetters: 0,\n\t};\n}\n\nfunction summarizeWorkers(\n\tworkers: readonly PlatformHostWorkerHealthInput[],\n\tnow: Date,\n): PlatformHostHealthSnapshot[\"workers\"] {\n\tlet healthy = 0;\n\tlet stale = 0;\n\tfor (const worker of workers) {\n\t\tif (\n\t\t\tNumber.isFinite(worker.staleAfterMs) &&\n\t\t\tworker.staleAfterMs >= 0 &&\n\t\t\tworker.lastHeartbeatAt.getTime() + worker.staleAfterMs >= now.getTime()\n\t\t) healthy += 1;\n\t\telse stale += 1;\n\t}\n\treturn { reported: workers.length, healthy, stale };\n}\n\nfunction createHealthSnapshot(\n\tgeneratedAt: Date,\n\tscope: PlatformHostHealthSnapshot[\"scope\"],\n\tcounts: PlatformHostHealthCounts,\n\tworkers: PlatformHostHealthSnapshot[\"workers\"],\n\tdataAvailable: boolean,\n): PlatformHostHealthSnapshot {\n\tconst reasonCodes: PlatformHostReadinessReason[] = [];\n\tif (!dataAvailable) reasonCodes.push(\"health_source_unavailable\");\n\tif (workers.stale > 0) reasonCodes.push(\"workers_stale\");\n\tif (counts.invocationExpiredLeases > 0) reasonCodes.push(\"invocation_expired_leases\");\n\tif (counts.outboxExpiredLeases > 0) reasonCodes.push(\"outbox_expired_leases\");\n\tif (counts.outboxDeadLetters > 0) reasonCodes.push(\"outbox_dead_letters\");\n\tif (counts.invocationReconciliationRequired > 0) reasonCodes.push(\"reconciliation_required\");\n\tconst unhealthy = !dataAvailable;\n\tconst degraded = unhealthy || reasonCodes.length > 0;\n\treturn {\n\t\tcontractVersion: PLATFORM_HOST_HEALTH_CONTRACT_VERSION,\n\t\tgeneratedAt,\n\t\tscope,\n\t\tdataAvailable,\n\t\tstatus: unhealthy ? \"unhealthy\" : degraded ? \"degraded\" : \"healthy\",\n\t\treadiness: {\n\t\t\tready: dataAvailable && workers.stale === 0,\n\t\t\treasonCodes,\n\t\t},\n\t\tworkers,\n\t\tinvocations: {\n\t\t\tbacklog: counts.invocationBacklog,\n\t\t\trunning: counts.invocationRunning,\n\t\t\texpiredLeases: counts.invocationExpiredLeases,\n\t\t\tapprovalWaits: counts.invocationApprovalWaits,\n\t\t\treconciliationRequired: counts.invocationReconciliationRequired,\n\t\t},\n\t\toutbox: {\n\t\t\tbacklog: counts.outboxBacklog,\n\t\t\texpiredLeases: counts.outboxExpiredLeases,\n\t\t\tdeadLetters: counts.outboxDeadLetters,\n\t\t},\n\t};\n}\n\nfunction emitHealthMetrics(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tsnapshot: PlatformHostHealthSnapshot,\n): void {\n\tconst scope = {\n\t\t...(snapshot.scope.tenantId ? { tenantId: snapshot.scope.tenantId } : {}),\n\t\t...(snapshot.scope.spaceId ? { spaceId: snapshot.scope.spaceId } : {}),\n\t};\n\tconst metrics: Array<[PlatformHostMetricName, number]> = [\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationBacklog, snapshot.invocations.backlog],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationRunning, snapshot.invocations.running],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationExpiredLeases, snapshot.invocations.expiredLeases],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationApprovalWaits, snapshot.invocations.approvalWaits],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationReconciliationRequiredGauge, snapshot.invocations.reconciliationRequired],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxBacklog, snapshot.outbox.backlog],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxExpiredLeases, snapshot.outbox.expiredLeases],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxDeadLetters, snapshot.outbox.deadLetters],\n\t];\n\tfor (const [name, value] of metrics) {\n\t\temitPlatformHostTelemetry(telemetry, {\n\t\t\tkind: \"metric\",\n\t\t\tname,\n\t\t\tmetricType: \"gauge\",\n\t\t\tvalue,\n\t\t\t...scope,\n\t\t\tobservedAt: snapshot.generatedAt,\n\t\t});\n\t}\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<void> {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\t\"then\" in value &&\n\t\ttypeof (value as { then?: unknown }).then === \"function\",\n\t);\n}\n","import type {\n\tActionId,\n\tActionStatus,\n} from \"@fabricorg/platform\";\nimport type {\n\tAtomicMutationPlatformHostStore,\n\tGovernancePlatformHostStore,\n\tPlatformHostOptions,\n} from \"./types\";\nimport { emitPlatformHostTelemetry, PLATFORM_HOST_METRIC_NAMES } from \"./observability\";\n\n// Helpers the host and its lifecycle modules share. Nothing here is public.\n\nexport function asAtomicMutationStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): AtomicMutationPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<AtomicMutationPlatformHostStore<TDb>>;\n\treturn typeof candidate.transactionWithEvents === \"function\"\n\t\t? (store as AtomicMutationPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nexport function asGovernanceStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): GovernancePlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<GovernancePlatformHostStore<TDb>>;\n\treturn typeof candidate.recordMutationGovernance === \"function\" &&\n\t\ttypeof candidate.appendPolicyObligations === \"function\" &&\n\t\ttypeof candidate.appendExecutionAttestation === \"function\"\n\t\t? (store as GovernancePlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nexport function withoutPrivateHostFields(\n\tdata: Record<string, unknown>,\n\teventResultFields: readonly string[],\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(data).filter(([key]) => !eventResultFields.includes(key)),\n\t);\n}\n\nexport function errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function lifecycleId(prefix: string, invocationId: string, key: string): string {\n\tconst safeKey = key.replace(/[^a-zA-Z0-9_-]/g, \"_\").slice(0, 96);\n\treturn `${prefix}_${invocationId}_${safeKey}`;\n}\n\nexport function emitInvocationStatusTelemetry(\n\tinvocation: {\n\t\tid: string;\n\t\ttenantId: string;\n\t\tspaceId: string;\n\t\tactionId?: ActionId;\n\t\tactionVersion?: number;\n\t},\n\tstatus: ActionStatus | undefined,\n\ttelemetry: PlatformHostOptions<unknown>[\"telemetry\"],\n\toccurredAt: Date,\n\tpreviousStatus?: ActionStatus,\n): void {\n\tif (!status) return;\n\tconst event = status === \"completed\"\n\t\t? { name: \"invocation.completed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationCompleted }\n\t\t: status === \"blocked_by_policy\"\n\t\t\t? { name: \"invocation.policy_blocked\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationPolicyBlocked }\n\t\t\t: status === \"validation_failed\"\n\t\t\t\t? { name: \"invocation.validation_failed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationValidationFailed }\n\t\t\t\t: status === \"waiting_for_approval\"\n\t\t\t\t\t? { name: \"invocation.approval_waited\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationApprovalWaited }\n\t\t\t\t\t: status === \"reconciliation_required\"\n\t\t\t\t\t\t? { name: \"invocation.reconciliation_required\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationReconciliationRequired }\n\t\t\t\t\t\t: status === \"failed\"\n\t\t\t\t\t\t\t? { name: \"invocation.failed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationFailed }\n\t\t\t\t\t\t\t: undefined;\n\tif (!event) return;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname: event.name,\n\t\tmetricName: event.metricName,\n\t\toccurredAt,\n\t\ttenantId: invocation.tenantId,\n\t\tspaceId: invocation.spaceId,\n\t\tattributes: {\n\t\t\t...(invocation.actionId ? { actionId: invocation.actionId } : {}),\n\t\t\t...(invocation.actionVersion !== undefined ? { actionVersion: invocation.actionVersion } : {}),\n\t\t\t...(previousStatus ? { fromStatus: previousStatus } : {}),\n\t\t},\n\t});\n}\n","import { createHash } from \"node:crypto\";\nimport type { ActionDefinition, ActionId } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationPatch,\n\tActionInvocationRecord,\n\tExecuteActionResult,\n\tExternalCompletion,\n\tPendingAssetEvent,\n\tPlatformHostMutationTransaction,\n\tPlatformHostOptions,\n\tRecordedExternalCompletion,\n\tRecoverablePlatformHostStore,\n\tReconcileOverdueCompletionsInput,\n} from \"./types\";\nimport { ExternalCompletionError } from \"./types\";\nimport { canonicalJson } from \"./command-identity\";\nimport {\n\tasAtomicMutationStore,\n\tasGovernanceStore,\n\temitInvocationStatusTelemetry,\n\tlifecycleId,\n\twithoutPrivateHostFields,\n} from \"./host-internals\";\n\n// ── External completion lifecycle ───────────────────────────────────────────\n//\n// An adapter hands work to an external system that finishes it later and\n// calls back. This module owns everything after the handoff is recorded:\n// settling the invocation by reference, absorbing repeats, catching\n// contradictions, surfacing overdue handoffs. The host's adapter loop owns\n// the handoff itself, since that happens mid-execution. What is shared with\n// the host is passed in, so the host stays the only thing that writes\n// invocations through a lease.\n\nexport interface ExternalCompletionDeps<TDb> {\n\tstore: PlatformHostOptions<TDb>[\"store\"];\n\ttelemetry: PlatformHostOptions<TDb>[\"telemetry\"];\n\teventResultFields: readonly string[];\n\tnow(): Date;\n\tactionResolver(actionId: ActionId): ActionDefinition<TDb> | undefined;\n\tappendEvent(\n\t\tinvocation: ActionInvocationRecord,\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion?: number,\n\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t): Promise<void>;\n\tpersistInvocation(invocation: ActionInvocationRecord, patch: ActionInvocationPatch): Promise<void>;\n\tactionResult(invocation: ActionInvocationRecord): ExecuteActionResult;\n\twithConsistency<TResult extends { actionInvocationId: string }>(result: TResult, actionId: ActionId): TResult;\n}\n\nexport interface ExternalCompletionLifecycle {\n\tcompleteExternalInvocation(actionInvocationId: string, tenantId: string, spaceId: string, completion: ExternalCompletion): Promise<ExecuteActionResult>;\n\treconcileOverdueCompletions(input?: ReconcileOverdueCompletionsInput): Promise<{ overdue: string[] }>;\n\trecordCompletionReconciliation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tcompletion: Pick<ExternalCompletion, \"externalReference\" | \"evidenceReferences\"> & { provider?: string; kind?: string },\n\t\treason: string,\n\t): Promise<void>;\n}\n\nexport function createExternalCompletionLifecycle<TDb>(deps: ExternalCompletionDeps<TDb>): ExternalCompletionLifecycle {\n\tconst { now, actionResolver, appendEvent, persistInvocation, actionResult, withConsistency, eventResultFields } = deps;\n\n\tasync function completeExternalInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcompletion: ExternalCompletion,\n\t): Promise<ExecuteActionResult> {\n\t\tif (typeof completion.externalReference !== \"string\" || completion.externalReference.trim() === \"\") {\n\t\t\tthrow new ExternalCompletionError(\"invalid_completion\", \"External completion must name the external reference it completes.\");\n\t\t}\n\t\tif (completion.outcome !== \"completed\" && completion.outcome !== \"failed\") {\n\t\t\tthrow new ExternalCompletionError(\"invalid_completion\", `External completion outcome must be \"completed\" or \"failed\", received \"${String(completion.outcome)}\".`);\n\t\t}\n\t\t// Read, decide, and write under one lock where the store can give one,\n\t\t// so two callbacks racing cannot both read \"nothing recorded yet\" and\n\t\t// both write. A base store without transactions keeps the narrower\n\t\t// read-then-write window; that is a property of the store, not of this\n\t\t// path, and the contract documents it.\n\t\tconst atomicStore = asAtomicMutationStore(deps.store);\n\t\tif (atomicStore) {\n\t\t\treturn atomicStore.transactionWithEvents(async (transaction) => {\n\t\t\t\tconst read = transaction.getActionInvocationForUpdate\n\t\t\t\t\t? await transaction.getActionInvocationForUpdate(actionInvocationId, tenantId, spaceId)\n\t\t\t\t\t: await deps.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\t\t\treturn settleExternalCompletion(read, actionInvocationId, completion, {\n\t\t\t\t\tupdate: (patch) => transaction.updateActionInvocation(actionInvocationId, tenantId, spaceId, patch),\n\t\t\t\t\ttransaction,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tconst read = await deps.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\treturn settleExternalCompletion(read, actionInvocationId, completion, {\n\t\t\tupdate: (patch) => deps.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, patch),\n\t\t});\n\t}\n\n\tasync function settleExternalCompletion(\n\t\tinvocation: ActionInvocationRecord | undefined,\n\t\tactionInvocationId: string,\n\t\tcompletion: ExternalCompletion,\n\t\twriter: {\n\t\t\tupdate: (patch: ActionInvocationPatch) => Promise<void>;\n\t\t\ttransaction?: PlatformHostMutationTransaction<TDb>;\n\t\t},\n\t): Promise<ExecuteActionResult> {\n\t\tif (!invocation) throw new ExternalCompletionError(\"not_found\", `ActionInvocation not found: ${actionInvocationId}`);\n\t\tconst recorded = invocation.externalCompletion;\n\t\tconst stillExecuting = !recorded && (\n\t\t\tinvocation.status === \"pending\"\n\t\t\t|| (invocation.status === \"running\" && (invocation.leaseOwner !== undefined || invocation.pendingCompletion?.parkedAt === undefined))\n\t\t);\n\t\tif (stillExecuting) {\n\t\t\t// The invocation has not parked: it is dispatched and not yet run, a\n\t\t\t// worker still holds it, or an inline execution recorded the handoff\n\t\t\t// and is still running the steps after it. Settling now would report\n\t\t\t// completed while effects are still being applied, and finalization\n\t\t\t// would then overwrite the verdict. The handoff is recorded before\n\t\t\t// the steps after it run, so \"not awaiting\" here means \"not yet\".\n\t\t\t// Callbacks arrive at least once; this one is asked to come back.\n\t\t\tthrow new ExternalCompletionError(\"still_executing\", `ActionInvocation ${actionInvocationId} is still executing; retry the completion after it parks.`);\n\t\t}\n\t\tif (recorded) {\n\t\t\tif (recorded.externalReference !== completion.externalReference) {\n\t\t\t\tthrow new ExternalCompletionError(\"reference_mismatch\", `ActionInvocation ${actionInvocationId} was completed by \"${recorded.externalReference}\", not \"${completion.externalReference}\".`);\n\t\t\t}\n\t\t\tif (completion.provider !== undefined && recorded.provider !== undefined && completion.provider !== recorded.provider) {\n\t\t\t\tthrow new ExternalCompletionError(\"provider_mismatch\", `ActionInvocation ${actionInvocationId} was completed by \"${recorded.provider}\", not \"${completion.provider}\".`);\n\t\t\t}\n\t\t\tconst incomingDigest = completionDigest(completion, recorded.provider ?? completion.provider);\n\t\t\tif (recorded.digest === incomingDigest) {\n\t\t\t\t// The same news twice. Callbacks are at-least-once; this is the once.\n\t\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t\t}\n\t\t\t// The external system contradicted itself, by flipping the outcome or\n\t\t\t// by reporting the same outcome with different evidence. Neither\n\t\t\t// answer can be trusted over the other, so the first stays on\n\t\t\t// record, the second goes to the reconciliation log, and consumers\n\t\t\t// hear about it.\n\t\t\tconst message = recorded.outcome === completion.outcome\n\t\t\t\t? `External operation \"${completion.externalReference}\" reported ${completion.outcome} again with different evidence.`\n\t\t\t\t: `External operation \"${completion.externalReference}\" reported ${completion.outcome} after reporting ${recorded.outcome}.`;\n\t\t\tawait recordCompletionReconciliation(invocation, { ...completion, kind: `contradicted:${incomingDigest.slice(0, 16)}` }, message);\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ExternalOperationContradicted\",\n\t\t\t\tsubjectType: \"AdapterInvocation\",\n\t\t\t\tsubjectId: invocation.pendingCompletion?.adapterInvocationId ?? actionInvocationId,\n\t\t\t\tpayload: { externalReference: completion.externalReference, recorded: recorded.outcome, reported: completion.outcome },\n\t\t\t}, `external:${completion.externalReference}:contradicted:${completion.outcome}`, 1, writer.transaction);\n\t\t\tawait writer.update({ status: \"reconciliation_required\", error: message });\n\t\t\temitInvocationStatusTelemetry(invocation, \"reconciliation_required\", deps.telemetry, now(), invocation.status);\n\t\t\treturn withConsistency(actionResult({ ...invocation, status: \"reconciliation_required\", error: message }), invocation.actionId);\n\t\t}\n\t\tconst pending = invocation.pendingCompletion;\n\t\tif (!pending) {\n\t\t\tconst action = actionResolver(invocation.actionId);\n\t\t\tif ((action?.execution?.completion ?? \"immediate\") === \"immediate\") {\n\t\t\t\tthrow new ExternalCompletionError(\"immediate_contract\", `Action ${invocation.actionId} declares immediate completion; nothing external completes it.`);\n\t\t\t}\n\t\t\tthrow new ExternalCompletionError(\"not_awaiting\", `ActionInvocation ${actionInvocationId} is not awaiting an external completion.`);\n\t\t}\n\t\tif (pending.externalReference !== completion.externalReference) {\n\t\t\tthrow new ExternalCompletionError(\"reference_mismatch\", `ActionInvocation ${actionInvocationId} awaits \"${pending.externalReference}\", not \"${completion.externalReference}\".`);\n\t\t}\n\t\tif (completion.provider !== undefined && completion.provider !== pending.provider) {\n\t\t\tthrow new ExternalCompletionError(\"provider_mismatch\", `ActionInvocation ${actionInvocationId} awaits completion from \"${pending.provider}\", not \"${completion.provider}\".`);\n\t\t}\n\t\tconst recordedAt = now();\n\t\tconst externalCompletion: RecordedExternalCompletion = {\n\t\t\t...completion,\n\t\t\tprovider: completion.provider ?? pending.provider,\n\t\t\tobservedAt: completion.observedAt instanceof Date ? completion.observedAt.toISOString() : completion.observedAt,\n\t\t\trecordedAt,\n\t\t\tdigest: completionDigest(completion, completion.provider ?? pending.provider),\n\t\t};\n\t\tconst subject = { subjectType: \"AdapterInvocation\", subjectId: pending.adapterInvocationId };\n\t\t// The adapter row and the reconciliation log are written on the outer\n\t\t// store, not the transaction: neither has a transaction-scoped seam, and\n\t\t// both are idempotent by id, so a rolled-back verdict leaves evidence\n\t\t// that a retry reconciles rather than duplicates.\n\t\t// A parked invocation settles by the outcome. One that already ended for\n\t\t// another reason (a later step failed, a contract was violated, a\n\t\t// deadline passed) keeps its status: the callback is evidence of what\n\t\t// happened out there, not a verdict on the invocation.\n\t\tconst settles = (invocation.status === \"running\" && pending.parkedAt !== undefined)\n\t\t\t|| (invocation.status === \"reconciliation_required\" && invocation.error?.includes(\"did not complete by\") === true);\n\t\tif (completion.outcome === \"completed\") {\n\t\t\tconst action = actionResolver(invocation.actionId);\n\t\t\tconst merged = withoutPrivateHostFields({ ...invocation.result, ...(completion.result ?? {}) }, eventResultFields);\n\t\t\tif (action?.resultSchema) {\n\t\t\t\tconst parsedResult = action.resultSchema.safeParse(merged);\n\t\t\t\tif (!parsedResult.success) {\n\t\t\t\t\tthrow new ExternalCompletionError(\"result_invalid\", `External completion result validation failed at ${parsedResult.error.issues\n\t\t\t\t\t\t.map((issue) => issue.path.map(String).join(\".\") || \"result\")\n\t\t\t\t\t\t.join(\", \")}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait deps.store.updateAdapterInvocation(pending.adapterInvocationId, {\n\t\t\t\t...(completion.result ? { output: withoutPrivateHostFields(completion.result, eventResultFields) } : {}),\n\t\t\t\tupdatedAt: recordedAt,\n\t\t\t});\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ExternalOperationCompleted\",\n\t\t\t\t...subject,\n\t\t\t\tpayload: { externalReference: pending.externalReference, provider: pending.provider, ...(completion.result ? { result: withoutPrivateHostFields(completion.result, eventResultFields) } : {}) },\n\t\t\t}, `external:${pending.adapterInvocationId}:completed`, 1, writer.transaction);\n\t\t\tconst patch: ActionInvocationPatch = settles\n\t\t\t\t? { status: \"completed\", result: merged, externalCompletion, pendingCompletion: undefined, error: undefined }\n\t\t\t\t: { externalCompletion, pendingCompletion: undefined };\n\t\t\tawait writer.update(patch);\n\t\t\tif (settles) emitInvocationStatusTelemetry(invocation, \"completed\", deps.telemetry, now(), invocation.status);\n\t\t\treturn withConsistency(actionResult({ ...invocation, ...patch, result: settles ? merged : invocation.result, ...(settles ? { error: undefined } : {}) }), invocation.actionId);\n\t\t}\n\t\tconst error = completion.error ?? `External operation \"${pending.externalReference}\" failed.`;\n\t\tawait deps.store.updateAdapterInvocation(pending.adapterInvocationId, { status: \"failed\", error, updatedAt: recordedAt });\n\t\tawait appendEvent(invocation, {\n\t\t\teventType: \"ExternalOperationFailed\",\n\t\t\t...subject,\n\t\t\tpayload: { externalReference: pending.externalReference, provider: pending.provider, error },\n\t\t}, `external:${pending.adapterInvocationId}:failed`, 1, writer.transaction);\n\t\tconst patch: ActionInvocationPatch = settles\n\t\t\t? { status: \"failed\", error, externalCompletion, pendingCompletion: undefined }\n\t\t\t: { externalCompletion, pendingCompletion: undefined };\n\t\tawait writer.update(patch);\n\t\tif (settles) emitInvocationStatusTelemetry(invocation, \"failed\", deps.telemetry, now(), invocation.status);\n\t\treturn withConsistency(actionResult({ ...invocation, ...patch }), invocation.actionId);\n\t}\n\n\t/** What a completion says, minus when it was said. */\n\tfunction completionDigest(completion: ExternalCompletion, provider: string | undefined): string {\n\t\treturn createHash(\"sha256\").update(canonicalJson({\n\t\t\tprovider: provider ?? null,\n\t\t\texternalReference: completion.externalReference,\n\t\t\toutcome: completion.outcome,\n\t\t\tresult: completion.result ?? null,\n\t\t\terror: completion.error ?? null,\n\t\t\tevidenceReferences: completion.evidenceReferences ?? null,\n\t\t})).digest(\"hex\");\n\t}\n\n\tasync function recordCompletionReconciliation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tcompletion: Pick<ExternalCompletion, \"externalReference\" | \"evidenceReferences\"> & { provider?: string; kind?: string },\n\t\treason: string,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(deps.store);\n\t\tif (!governanceStore) throw new Error(\"External completion reconciliation requires a governance-capable store.\");\n\t\tconst provider = completion.provider ?? invocation.pendingCompletion?.provider ?? invocation.externalCompletion?.provider ?? \"external\";\n\t\t// Deterministic, and hashed so a long vendor reference cannot truncate\n\t\t// two distinct findings into one id.\n\t\tconst seed = createHash(\"sha256\").update(`${provider}\\u0000${completion.externalReference}\\u0000${completion.kind ?? \"refused\"}`).digest(\"hex\").slice(0, 32);\n\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\tid: lifecycleId(\"rec\", invocation.id, `ext:${seed}`),\n\t\t\tactionInvocationId: invocation.id,\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tstatus: \"pending\",\n\t\t\tprovider,\n\t\t\texternalOperationId: completion.externalReference,\n\t\t\tattempt: 1,\n\t\t\treason,\n\t\t\t...(completion.evidenceReferences ? { evidenceReferences: completion.evidenceReferences } : {}),\n\t\t\tobservedAt: now(),\n\t\t});\n\t}\n\n\tasync function reconcileOverdueCompletions(\n\t\tinput: ReconcileOverdueCompletionsInput = {},\n\t): Promise<{ overdue: string[] }> {\n\t\tconst recoverable = deps.store as Partial<RecoverablePlatformHostStore<TDb>>;\n\t\tif (!recoverable.listActionInvocations) {\n\t\t\tthrow new Error(\"Overdue completion reconciliation requires a store that can list invocations.\");\n\t\t}\n\t\tif (!asGovernanceStore(deps.store)) {\n\t\t\tthrow new Error(\"Overdue completion reconciliation requires a governance-capable store to record its findings.\");\n\t\t}\n\t\tconst current = input.now ?? now();\n\t\tconst candidates = await recoverable.listActionInvocations({\n\t\t\tstatuses: [\"running\"],\n\t\t\tcompletionDueBefore: current,\n\t\t\tunleased: true,\n\t\t\t...(input.tenantId ? { tenantId: input.tenantId } : {}),\n\t\t\t...(input.spaceId ? { spaceId: input.spaceId } : {}),\n\t\t\tlimit: Math.max(1, Math.min(input.limit ?? 100, 1_000)),\n\t\t});\n\t\tconst overdue: string[] = [];\n\t\tfor (const invocation of candidates) {\n\t\t\tconst pending = invocation.pendingCompletion;\n\t\t\tif (!pending?.dueAt || pending.dueAt.getTime() > current.getTime()) continue;\n\t\t\t// A leased row is a live worker's to finish, and its lease expiry\n\t\t\t// reclaims it if the worker died. An unleased, unparked row is an\n\t\t\t// inline execution that will never park; once overdue it is exactly\n\t\t\t// what this sweep exists to surface.\n\t\t\tif (invocation.leaseOwner) continue;\n\t\t\tconst message = `External operation \"${pending.externalReference}\" from ${pending.provider} did not complete by ${pending.dueAt.toISOString()}.`;\n\t\t\tawait recordCompletionReconciliation(invocation, { externalReference: pending.externalReference, provider: pending.provider, kind: \"overdue\" }, message);\n\t\t\t// The handoff stays recorded: a late completion is still the truth\n\t\t\t// about what happened, and it can still land.\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\toverdue.push(invocation.id);\n\t\t}\n\t\treturn { overdue };\n\t}\n\n\n\treturn { completeExternalInvocation, reconcileOverdueCompletions, recordCompletionReconciliation };\n}\n","import {\n\tAdapterRegistry,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tassertAdapterOutcomeConsistency,\n\tevaluateStateMachineTransition,\n\tassertMutationGovernanceContext,\n\tassertGovernanceRuntimeEvidence,\n\tFABRIC_GOVERNANCE_CONTRACT_VERSION,\n} from \"@fabricorg/platform\";\nimport { assertAssemblyRuntimeCompatible } from \"@fabricorg/assembly\";\nimport type {\n\tActionDefinition,\n\tActionId,\n\tActionStatus,\n\tAssetEventEnvelope,\n\tRuntimePolicyDefinition,\n\tExecutionAttestation,\n\tExternalReconciliation,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionApprovalDecision,\n\tActionAuthorizationInput,\n\tActionExecutionReason,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tAdapterReconciliationOutcome,\n\tApprovalPlatformHostStore,\n\tExecuteActionResult,\n\tExecuteInvocationOptions,\n\tGovernedActionHost,\n\tPendingAssetEvent,\n\tOutboxPlatformHostStore,\n\tPlatformHostOptions,\n\tPlatformHostMutationTransaction,\n\tSubmitActionInput,\n\tSubmitActionResult,\n\tIdempotencyConflict,\n\tRecoverablePlatformHostStore,\n\tActionInvocationPatch,\n\tPendingExternalCompletion,\n} from \"./types\";\nimport { IdempotencyConflictError, PLATFORM_HOST_CONTRACT_VERSION } from \"./types\";\nimport { digestParameters, normalizeProvenance, PARAMETER_DIGEST_ALGORITHM } from \"./command-identity\";\nimport { createExternalCompletionLifecycle } from \"./external-completion\";\nimport {\n\tasAtomicMutationStore,\n\tasGovernanceStore,\n\temitInvocationStatusTelemetry,\n\terrorMessage,\n\tlifecycleId,\n\twithoutPrivateHostFields,\n} from \"./host-internals\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n} from \"./observability\";\n\nconst DEFAULT_EXTRACT_EVENTS = (data: Record<string, unknown>): PendingAssetEvent[] => {\n\tconst value = data._events;\n\treturn Array.isArray(value) ? (value as PendingAssetEvent[]) : [];\n};\n\nclass RecoverableFinalizationError extends Error {\n\toverride readonly name = \"RecoverableFinalizationError\";\n}\n\nexport function createGovernedActionHost<TDb>(\n\toptions: PlatformHostOptions<TDb>,\n): GovernedActionHost {\n\tif (options.composition) {\n\t\tif (!options.registry?.orderedModules) {\n\t\t\tthrow new Error(\"Composition-bound Platform Host requires an explicit module registry.\");\n\t\t}\n\t\tassertAssemblyRuntimeCompatible(\n\t\t\toptions.composition.assembly,\n\t\t\toptions.registry.orderedModules.map((module) => ({\n\t\t\t\tnamespace: module.namespace,\n\t\t\t\tversion: module.version ?? \"\",\n\t\t\t\tmanifestDigest: module.manifestDigest ?? \"\",\n\t\t\t})),\n\t\t);\n\t}\n\tif (options.outbox) {\n\t\tconst outboxStore = asOutboxStore(options.store);\n\t\tif (!outboxStore || !asAtomicMutationStore(options.store) || outboxStore.transactionalOutbox !== true) {\n\t\t\tthrow new Error(\"Outbox egress requires a store with transactionalOutbox and transactionWithEvents capabilities.\");\n\t\t}\n\t}\n\tconst adapters = new AdapterRegistry();\n\tfor (const adapter of options.adapters ?? []) adapters.register(adapter);\n\tconst now = options.now ?? (() => new Date());\n\tconst extractEvents = options.extractEvents ?? DEFAULT_EXTRACT_EVENTS;\n\tconst configuredActionResolver = options.resolveAction ?? options.registry?.resolveAction;\n\tif (!configuredActionResolver) throw new Error(\"Platform Host requires an explicit module registry or resolveAction function.\");\n\tconst actionResolver: NonNullable<PlatformHostOptions<TDb>[\"resolveAction\"]> = configuredActionResolver;\n\tconst stateMachineResolver = options.registry?.resolveStateMachine ?? (() => undefined);\n\tconst eventResultFields = options.eventResultFields ?? [\"_events\"];\n\n\tasync function submitAction(input: SubmitActionInput): Promise<SubmitActionResult> {\n\t\tif (input.executionReason && ![\"initial\", \"offline_replay\"].includes(input.executionReason)) {\n\t\t\tthrow new Error(`Unsupported submitted execution reason: ${input.executionReason}`);\n\t\t}\n\t\tconst action = actionResolver(input.actionId);\n\t\tif (!action) throw new Error(`Unknown action: ${input.actionId}`);\n\t\t// An action that requires connectivity was never eligible to be captured offline.\n\t\tif (action.execution?.connectivity === \"online-required\" && input.executionReason === \"offline_replay\") {\n\t\t\tthrow new Error(`Action ${input.actionId} is online-required and cannot be submitted as an offline replay.`);\n\t\t}\n\t\tif (action.execution?.sensitivity === \"restricted\" && Object.keys(input.provenance?.auditAttributes ?? {}).length > 0) {\n\t\t\tthrow new Error(`Action ${input.actionId} declares restricted sensitivity; provenance audit attributes must not be durably recorded.`);\n\t\t}\n\t\tconst authorizationInput = toAuthorizationInput(action, input);\n\t\tif (!(await options.authorization.checkEntitlement(authorizationInput))) {\n\t\t\tthrow new Error(`Module \"${action.namespace}\" is not enabled for tenant ${input.tenantId}`);\n\t\t}\n\t\tif (!(await options.authorization.authorize(authorizationInput))) {\n\t\t\tthrow new Error(`Actor ${input.actorId} is not authorized for action ${input.actionId}`);\n\t\t}\n\n\t\tconst actionInvocationId = createFabricId(\"act\");\n\t\tif (input.correlationId && input.provenance?.correlationId && input.correlationId !== input.provenance.correlationId) throw new Error(\"Invocation provenance correlationId does not match submission correlationId.\");\n\t\tif (input.causationId && input.provenance?.causationId && input.causationId !== input.provenance.causationId) throw new Error(\"Invocation provenance causationId does not match submission causationId.\");\n\t\tconst correlationId = input.correlationId ?? input.provenance?.correlationId ?? createFabricId(\"corr\");\n\t\tconst durableParameters = options.redactActionParameters\n\t\t\t? options.redactActionParameters(input.actionId, input.parameters)\n\t\t\t: input.parameters;\n\t\tconst parameterDigest = digestParameters(input.parameters);\n\t\tif (input.authorizationBinding) validateAuthorizationBinding(input, parameterDigest, action.execution?.authorityMoment, now());\n\t\tconst durableProvenance = normalizeProvenance(\n\t\t\tinput.provenance,\n\t\t\toptions.provenance as PlatformHostOptions<unknown>[\"provenance\"],\n\t\t);\n\t\tconst initiatingReleaseDigest =\n\t\t\tawait options.composition?.resolveInitiatingReleaseDigest?.(input);\n\t\tconst runtimeEvidence = {\n\t\t\tgovernanceContractVersion: FABRIC_GOVERNANCE_CONTRACT_VERSION,\n\t\t\thostContractVersion: PLATFORM_HOST_CONTRACT_VERSION,\n\t\t\t...options.runtimeEvidence,\n\t\t\t...(options.composition\n\t\t\t\t? { assemblyDigest: options.composition.assembly.assemblyDigest }\n\t\t\t\t: {}),\n\t\t\t...(initiatingReleaseDigest\n\t\t\t\t? { initiatingReleaseDigest }\n\t\t\t\t: {}),\n\t\t};\n\t\tassertGovernanceRuntimeEvidence(runtimeEvidence);\n\t\tconst durableInvocation = await options.store.createActionInvocation({\n\t\t\tid: actionInvocationId,\n\t\t\ttenantId: input.tenantId,\n\t\t\tspaceId: input.spaceId,\n\t\t\tactionId: input.actionId,\n\t\t\tactionVersion: action.version,\n\t\t\tactorId: input.actorId,\n\t\t\tactorType: input.actorType,\n\t\t\tstatus: \"pending\",\n\t\t\tparameters: durableParameters,\n\t\t\tresult: {},\n\t\t\truntimeEvidence,\n\t\t\tcorrelationId,\n\t\t\t...((input.causationId ?? input.provenance?.causationId) ? { causationId: input.causationId ?? input.provenance?.causationId } : {}),\n\t\t\t...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n\t\t\t...(input.idempotencyKey ? {\n\t\t\t\tparameterDigest,\n\t\t\t\tparameterDigestAlgorithm: PARAMETER_DIGEST_ALGORITHM,\n\t\t\t\tidempotencyActorId: input.actorId,\n\t\t\t\t...(input.authorizationBindingId ? { idempotencyAuthorizationBindingId: input.authorizationBindingId } : {}),\n\t\t\t} : {}),\n\t\t\t...(durableProvenance ? { provenance: durableProvenance } : {}),\n\t\t\t...(input.authorizationBinding ? { authorizationBinding: input.authorizationBinding } : {}),\n\t\t\t...(input.executionReason ? { executionReason: input.executionReason } : {}),\n\t\t\t...(input.authorizationBindingId\n\t\t\t\t? { authorizationBindingId: input.authorizationBindingId }\n\t\t\t\t: {}),\n\t\t});\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.submitted\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationSubmitted,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId: input.tenantId,\n\t\t\tspaceId: input.spaceId,\n\t\t\tattributes: { actionVersion: action.version },\n\t\t});\n\t\tif (durableInvocation.id !== actionInvocationId && input.idempotencyKey) {\n\t\t\tconst conflict = idempotencyConflict(durableInvocation, {\n\t\t\t\tactorId: input.actorId,\n\t\t\t\tauthorizationBindingId: input.authorizationBindingId,\n\t\t\t\tactionVersion: action.version,\n\t\t\t\tparameterDigest,\n\t\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\t});\n\t\t\tif (!durableInvocation.parameterDigest) {\n\t\t\t\toptions.idempotency?.onLegacyRecord?.(durableInvocation);\n\t\t\t\tconst enforceableLegacyConflict = conflict && { ...conflict, reasons: conflict.reasons.filter((reason) => reason !== \"parameters\") };\n\t\t\t\tif (enforceableLegacyConflict && enforceableLegacyConflict.reasons.length) {\n\t\t\t\t\toptions.idempotency?.onConflict?.(enforceableLegacyConflict);\n\t\t\t\t\tif ((options.idempotency?.conflictMode ?? \"enforce\") === \"enforce\") throw new IdempotencyConflictError(enforceableLegacyConflict);\n\t\t\t\t}\n\t\t\t} else if (conflict) {\n\t\t\t\toptions.idempotency?.onConflict?.(conflict);\n\t\t\t\tif ((options.idempotency?.conflictMode ?? \"enforce\") === \"enforce\") throw new IdempotencyConflictError(conflict);\n\t\t\t}\n\t\t}\n\t\tconst durableWorkflowId = `action-invocation-${durableInvocation.id}`;\n\t\tif (durableInvocation.id !== actionInvocationId) {\n\t\t\t// A pending dispatch may be retried with the same stable workflow id.\n\t\t\t// Terminal and running invocations report what the original did.\n\t\t\tif (options.dispatcher && durableInvocation.status === \"pending\") {\n\t\t\t\tconst dispatched = await options.dispatcher.dispatch({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tactionId: durableInvocation.actionId,\n\t\t\t\t\ttenantId: input.tenantId,\n\t\t\t\t\tspaceId: input.spaceId,\n\t\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\t});\n\t\t\t\treturn withConsistency({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\t\tworkflowId: dispatched.workflowId,\n\t\t\t\t\t...(dispatched.runId ? { runId: dispatched.runId } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t}, input.actionId);\n\t\t\t}\n\t\t\treturn withConsistency({\n\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\tresult: durableInvocation.result,\n\t\t\t\t...(durableInvocation.error ? { error: durableInvocation.error } : {}),\n\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.authorizationReconciliation\n\t\t\t\t\t? { reconciliation: durableInvocation.authorizationReconciliation }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.adapterReconciliation\n\t\t\t\t\t? { adapterReconciliation: durableInvocation.adapterReconciliation }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.pendingCompletion\n\t\t\t\t\t? { pendingCompletion: durableInvocation.pendingCompletion }\n\t\t\t\t\t: {}),\n\t\t\t}, input.actionId);\n\t\t}\n\n\t\tif (options.dispatcher) {\n\t\t\ttry {\n\t\t\t\tconst dispatched = await options.dispatcher.dispatch({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tactionId: durableInvocation.actionId,\n\t\t\t\t\ttenantId: input.tenantId,\n\t\t\t\t\tspaceId: input.spaceId,\n\t\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\t});\n\t\t\t\treturn withConsistency({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\t\tworkflowId: dispatched.workflowId,\n\t\t\t\t\t...(dispatched.runId ? { runId: dispatched.runId } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t}, input.actionId);\n\t\t\t} catch (error) {\n\t\t\t\t// The durable invocation remains pending. A caller can resubmit the\n\t\t\t\t// same idempotency key, or an out-of-band dispatcher can retry the\n\t\t\t\t// stable workflow id without recreating the logical mutation.\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst executed = await executeInvocation(\n\t\t\tdurableInvocation.id,\n\t\t\tinput.tenantId,\n\t\t\tinput.spaceId,\n\t\t);\n\t\treturn { ...withConsistency(executed, input.actionId), workflowId: durableWorkflowId };\n\t}\n\n\tasync function executeInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\texecutionOptions: ExecuteInvocationOptions = {},\n\t\texecutionReasonOverride?: ActionExecutionReason,\n\t): Promise<ExecuteActionResult> {\n\t\tconst loadedInvocation = await options.store.getActionInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t);\n\t\tif (!loadedInvocation) {\n\t\t\tthrow new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\t}\n\t\tconst resumingRunningInvocation = loadedInvocation.status === \"running\";\n\t\tlet invocation: ActionInvocationRecord = loadedInvocation;\n\t\tif (isTerminal(invocation.status) || invocation.status === \"waiting_for_approval\") {\n\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t}\n\t\tif (invocation.status === \"running\" && invocation.pendingCompletion && !invocation.leaseOwner) {\n\t\t\t// Parked, not stuck: an external system holds the next move. A\n\t\t\t// leased row with a handoff is the other case, a worker that died\n\t\t\t// between accepting the handoff and finalizing, and that one runs\n\t\t\t// on so finalization can complete; the loop skips the handed-off step.\n\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t}\n\t\tif (\n\t\t\tinvocation.status === \"running\" &&\n\t\t\tinvocation.leaseOwner &&\n\t\t\t(executionOptions.leaseOwner !== invocation.leaseOwner ||\n\t\t\t\t((invocation.leaseToken ?? 0) > 0 &&\n\t\t\t\t\texecutionOptions.leaseToken !== invocation.leaseToken))\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Invocation lease is not owned by the supplied worker generation`,\n\t\t\t};\n\t\t}\n\t\tconst action = actionResolver(invocation.actionId);\n\t\tif (!action) {\n\t\t\treturn fail(invocation, \"failed\", `Unknown action: ${invocation.actionId}`);\n\t\t}\n\t\tif (action.kind === \"saga\") {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Saga action ${invocation.actionId} requires a durable PlatformActionDispatcher and cannot execute as an atomic Host action.`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tresumingRunningInvocation &&\n\t\t\tinvocation.attemptCount === 0 &&\n\t\t\t!invocation.leaseOwner &&\n\t\t\t!action.idempotent\n\t\t) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Interrupted inline action ${invocation.actionId} is not declared idempotent; manual reconciliation is required.`,\n\t\t\t);\n\t\t}\n\t\tif (invocation.attemptCount > 1 && !action.idempotent) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Interrupted action ${invocation.actionId} is not declared idempotent; manual reconciliation is required.`,\n\t\t\t);\n\t\t}\n\t\tif (invocation.status !== \"running\") {\n\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\t\tstatus: \"running\",\n\t\t\t});\n\t\t}\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.execution_started\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationExecutionStarted,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tattributes: { actionVersion: invocation.actionVersion },\n\t\t});\n\t\ttry {\n\n\t\tconst parsed = action.schema.safeParse(invocation.parameters);\n\t\tif (!parsed.success) {\n\t\t\tconst message = parsed.error.issues\n\t\t\t\t.map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n\t\t\t\t.join(\"; \");\n\t\t\treturn fail(invocation, \"validation_failed\", message);\n\t\t}\n\n\t\tif (options.resolveMutationGovernance && !invocation.mutationFootprint) {\n\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\tif (!governanceStore) {\n\t\t\t\treturn fail(invocation, \"failed\", \"The configured mutation-governance resolver requires a governance-capable store.\");\n\t\t\t}\n\t\t\tconst context = await options.resolveMutationGovernance({\n\t\t\t\tactionInvocationId, actionId: action.actionId, tenantId, spaceId,\n\t\t\t\tactorId: invocation.actorId, actorType: invocation.actorType, parameters: parsed.data,\n\t\t\t});\n\t\t\tassertMutationGovernanceContext(context);\n\t\t\tinvocation = await governanceStore.recordMutationGovernance(actionInvocationId, tenantId, spaceId, context);\n\t\t}\n\n\t\tif (invocation.actorType === \"agent\" && options.hitlEvaluator) {\n\t\t\tconst hitlParameters = isRecord(parsed.data) ? parsed.data : invocation.parameters;\n\t\t\tconst approvalStore = asApprovalStore(options.store);\n\t\t\tif (!approvalStore) {\n\t\t\t\treturn fail(\n\t\t\t\t\tinvocation,\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t\"The configured HITL evaluator requires a store with approval persistence support.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!invocation.hitlRoute) {\n\t\t\t\tconst decision = await options.hitlEvaluator({\n\t\t\t\t\tactionId: action.actionId,\n\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\tactorType: invocation.actorType,\n\t\t\t\t\ttenantId,\n\t\t\t\t\tspaceId,\n\t\t\t\t\tparameters: hitlParameters,\n\t\t\t\t\t...(numberValue(hitlParameters.confidence) !== undefined\n\t\t\t\t\t\t? { confidence: numberValue(hitlParameters.confidence) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(isRiskTier(hitlParameters.riskTier)\n\t\t\t\t\t\t? { riskTier: hitlParameters.riskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(stringValue(hitlParameters.agentSessionId)\n\t\t\t\t\t\t? { agentSessionId: stringValue(hitlParameters.agentSessionId) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(stringValue(hitlParameters.agentRunId)\n\t\t\t\t\t\t? { agentRunId: stringValue(hitlParameters.agentRunId) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t\tinvocation = await approvalStore.recordHitlDecision(\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\ttenantId,\n\t\t\t\t\tspaceId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...decision,\n\t\t\t\t\t\t...(options.hitlPolicyVersion\n\t\t\t\t\t\t\t? { policyVersion: options.hitlPolicyVersion }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tevaluatedAt: now(),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (invocation.hitlRoute === \"rejected\") {\n\t\t\t\treturn fail(\n\t\t\t\t\tinvocation,\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t`HITL rejected: ${invocation.hitlReason ?? \"no reason provided\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(invocation.hitlRoute === \"needs-approval\" ||\n\t\t\t\t\tinvocation.hitlRoute === \"escalate\") &&\n\t\t\t\t!invocation.approvalDecision?.approved\n\t\t\t) {\n\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\tstatus: \"waiting_for_approval\",\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...actionResult(invocation),\n\t\t\t\t\tstatus: \"waiting_for_approval\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst authorizationInput = toAuthorizationInput(action, invocation);\n\t\tconst executionReason = executionReasonOverride ??\n\t\t\t(invocation.attemptCount > 1 || (resumingRunningInvocation && invocation.attemptCount === 0)\n\t\t\t\t? \"recovery\"\n\t\t\t\t: invocation.executionReason ?? \"initial\");\n\t\tif (!(await options.authorization.checkEntitlement(authorizationInput))) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Module \"${action.namespace}\" is no longer enabled for tenant ${tenantId}`,\n\t\t\t);\n\t\t}\n\t\tconst authorityMoment = action.execution?.authorityMoment;\n\t\tif (authorityMoment === \"capture\" && !invocation.authorizationBinding) {\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_missing_capture_evidence\" as const,\n\t\t\t\tgoverningMoment: authorityMoment,\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Action ${action.actionId} requires durable capture-time authorization evidence`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst bindingExpired = authorityMoment !== \"capture\" && invocation.authorizationBinding?.expiresAt !== undefined &&\n\t\t\tDate.parse(invocation.authorizationBinding.expiresAt) <= now().getTime();\n\t\tif (bindingExpired) {\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_expired\" as const,\n\t\t\t\tgoverningMoment: authorityMoment ?? \"both\",\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.authorizationBindingId ? { authorizationBindingId: invocation.authorizationBindingId } : {}),\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Authorization binding for action ${action.actionId} expired before execution`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst executionAuthorized = authorityMoment === \"capture\"\n\t\t\t? invocation.authorizationBinding !== undefined\n\t\t\t: options.authorization.authorizeExecution\n\t\t\t\t? await options.authorization.authorizeExecution({\n\t\t\t\t\t...authorizationInput,\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\tparameters: parsed.data,\n\t\t\t\t\tinvocation,\n\t\t\t\t\texecutionReason,\n\t\t\t\t})\n\t\t\t\t: await options.authorization.authorize(authorizationInput);\n\t\tif (!executionAuthorized) {\n\t\t\tif (!action.execution) {\n\t\t\t\treturn fail(invocation, \"failed\", `Actor ${invocation.actorId} is not authorized to execute action ${action.actionId}`);\n\t\t\t}\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_denied\" as const,\n\t\t\t\tgoverningMoment: action.execution?.authorityMoment ?? \"both\",\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.authorizationBindingId ? { authorizationBindingId: invocation.authorizationBindingId } : {}),\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Actor ${invocation.actorId} is not authorized to execute action ${action.actionId}`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst definitions = options.resolvePolicies\n\t\t\t? await options.resolvePolicies({\n\t\t\t\t\t...authorizationInput,\n\t\t\t\t\tdeclaredPolicyIds: action.policies ?? [],\n\t\t\t\t})\n\t\t\t: declaredPolicies(action.policies ?? []);\n\t\tconst outcomes = await evaluatePolicyDefinitions(definitions, {\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tactionInvocationId,\n\t\t\tactionId: action.actionId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tparameters: parsed.data,\n\t\t\tdb: options.store.db,\n\t\t\tservices: options.services,\n\t\t\tresolveCodePolicy: options.registry?.resolvePolicy,\n\t\t\tmode: \"execute\",\n\t\t\tnow: now(),\n\t\t});\n\t\tfor (const outcome of outcomes) {\n\t\t\tawait options.store.appendPolicyEvaluation({\n\t\t\t\tid: lifecycleId(\"pol\", actionInvocationId, outcome.policyId),\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\toutcome,\n\t\t\t\tcreatedAt: now(),\n\t\t\t});\n\t\t}\n\t\tconst aggregate = aggregatePolicyOutcomes(outcomes);\n\t\tif (aggregate?.result === \"block\") {\n\t\t\tconst reason = aggregate.reason ?? `Blocked by policy ${aggregate.policyId}`;\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ComplianceBlocked\",\n\t\t\t\tsubjectType: \"ActionInvocation\",\n\t\t\t\tsubjectId: actionInvocationId,\n\t\t\t\tpayload: { actionId: action.actionId, policyId: aggregate.policyId, reason },\n\t\t\t}, `compliance:${aggregate.policyId}`);\n\t\t\treturn fail(invocation, \"blocked_by_policy\", reason);\n\t\t}\n\t\tif (options.resolvePolicyObligations) {\n\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\tif (!governanceStore) {\n\t\t\t\treturn fail(invocation, \"failed\", \"Policy obligations require a governance-capable store.\");\n\t\t\t}\n\t\t\tconst existing = await governanceStore.listPolicyObligations(actionInvocationId, tenantId, spaceId);\n\t\t\tif (existing.length === 0) {\n\t\t\t\tconst createdAt = now();\n\t\t\t\tconst obligations = await options.resolvePolicyObligations(outcomes);\n\t\t\t\tawait governanceStore.appendPolicyObligations(obligations.map((obligation) => ({\n\t\t\t\t\t...obligation, status: obligation.status ?? \"pending\", actionInvocationId,\n\t\t\t\t\ttenantId, spaceId, createdAt, updatedAt: createdAt,\n\t\t\t\t})));\n\t\t\t}\n\t\t}\n\n\t\tlet data: Record<string, unknown>;\n\t\tlet domainEvents: PendingAssetEvent[] = [];\n\t\ttry {\n\t\t\tconst runHandler = async (\n\t\t\t\tdb: TDb,\n\t\t\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t\t\t) => {\n\t\t\t\tif (options.outbox && !transaction?.appendEventWithOutbox) {\n\t\t\t\t\tthrow new Error(\"Outbox egress requires transactionWithEvents to provide appendEventWithOutbox before handler execution.\");\n\t\t\t\t}\n\t\t\t\tconst binding = action.stateMachine;\n\t\t\t\tif (binding) {\n\t\t\t\t\tconst machine = stateMachineResolver(binding.entityType);\n\t\t\t\t\tconst entityId = binding.getEntityId(parsed.data);\n\t\t\t\t\tconst getEntityState = transaction?.getEntityState\n\t\t\t\t\t\t? transaction.getEntityState.bind(transaction)\n\t\t\t\t\t\t: options.store.getEntityState.bind(options.store);\n\t\t\t\t\tconst currentState = entityId\n\t\t\t\t\t\t? ((await getEntityState(\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t\t)) ?? initialState(machine))\n\t\t\t\t\t\t: initialState(machine);\n\t\t\t\t\tconst targetState =\n\t\t\t\t\t\ttypeof binding.targetState === \"function\"\n\t\t\t\t\t\t\t? binding.targetState(parsed.data)\n\t\t\t\t\t\t\t: binding.targetState;\n\t\t\t\t\tif (targetState !== \"\") {\n\t\t\t\t\t\tconst transition = await evaluateStateMachineTransition(\n\t\t\t\t\t\t\tmachine,\n\t\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\t\tcurrentState,\n\t\t\t\t\t\t\ttargetState,\n\t\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tentity: {\n\t\t\t\t\t\t\t\t\t...(entityId ? { id: entityId } : {}),\n\t\t\t\t\t\t\t\t\tstate: currentState,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\t\t\t\tparameters: parsed.data,\n\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst replayingAppliedTransition = action.idempotent && currentState === targetState;\n\t\t\t\t\t\tif (!transition.valid && !replayingAppliedTransition) {\n\t\t\t\t\t\t\tthrow new Error(transition.error ?? \"Invalid state transition\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst handlerResult = action.handler\n\t\t\t\t\t? await action.handler(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\t\t\t\tactorType: invocation.actorType,\n\t\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t\t\t\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\tservices: options.services,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tparsed.data,\n\t\t\t\t\t\t)\n\t\t\t\t\t: { success: true as const, data: {} };\n\t\t\t\tif (!handlerResult.success) {\n\t\t\t\t\tthrow new Error(handlerResult.error ?? \"Action handler failed\");\n\t\t\t\t}\n\t\t\t\tconst handlerData = handlerResult.data ?? {};\n\t\t\t\tif (action.resultSchema) {\n\t\t\t\t\tconst publicResult = withoutPrivateHostFields(handlerData, eventResultFields);\n\t\t\t\t\tconst parsedResult = action.resultSchema.safeParse(publicResult);\n\t\t\t\t\tif (!parsedResult.success) {\n\t\t\t\t\t\tthrow new Error(`Action result validation failed at ${parsedResult.error.issues\n\t\t\t\t\t\t\t.map((issue) => issue.path.map(String).join(\".\") || \"result\")\n\t\t\t\t\t\t\t.join(\", \")}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst events = extractEvents(handlerData);\n\t\t\t\tconst undeclaredEvent = events.find(\n\t\t\t\t\t(event) => !action.emitsEvents.includes(event.eventType),\n\t\t\t\t);\n\t\t\t\tif (undeclaredEvent) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${action.actionId} emitted undeclared event type ${undeclaredEvent.eventType}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (action.eventPhase !== \"after_adapters\") {\n\t\t\t\t\tfor (const [index, event] of events.entries()) {\n\t\t\t\t\t\tawait appendEvent(\n\t\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t`domain:${index}`,\n\t\t\t\t\t\t\taction.version,\n\t\t\t\t\t\t\ttransaction,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { data: handlerData, domainEvents: events };\n\t\t\t};\n\t\t\tconst atomicStore = asAtomicMutationStore(options.store);\n\t\t\tconst executed = atomicStore\n\t\t\t\t? await atomicStore.transactionWithEvents((transaction) =>\n\t\t\t\t\t\trunHandler(transaction.db, transaction),\n\t\t\t\t\t)\n\t\t\t\t: await options.store.transaction((db) => runHandler(db));\n\t\t\tdata = executed.data;\n\t\t\tdomainEvents = executed.domainEvents;\n\t\t} catch (error) {\n\t\t\treturn fail(invocation, \"failed\", errorMessage(error));\n\t\t}\n\n\t\t// At most one adapter step may hand the work off to finish elsewhere. Two\n\t\t// would leave the invocation waiting on two references with one status.\n\t\t// A handoff is persisted the moment it is accepted, before the step is\n\t\t// marked done, so a crash between the two leaves the handoff and not\n\t\t// the marker: on re-execution the step is skipped and the handoff kept.\n\t\tlet pendingHandoff: PendingExternalCompletion | undefined = invocation.pendingCompletion;\n\t\tfor (const [stepIndex, step] of (action.adapterSteps ?? []).entries()) {\n\t\t\tconst input = step.getInput(parsed.data, data);\n\t\t\tif (!input) continue;\n\t\t\tconst adapter = adapters.require(step.adapterType, step.operation);\n\t\t\tconst adapterInvocationId = lifecycleId(\"adp\", actionInvocationId, String(stepIndex));\n\t\t\tconst previousAdapterInvocation = await options.store.getAdapterInvocation(\n\t\t\t\tadapterInvocationId,\n\t\t\t);\n\t\t\tif (previousAdapterInvocation?.status === \"succeeded\") continue;\n\t\t\tif (pendingHandoff?.adapterInvocationId === adapterInvocationId) {\n\t\t\t\t// The handoff was durably accepted; only the marker was lost, and\n\t\t\t\t// with it whatever came after the persist. Replay the events by\n\t\t\t\t// their stable ids so consumers hear about the handoff exactly\n\t\t\t\t// once; the adapter's output is gone with the dead worker.\n\t\t\t\tconst subject = options.adapterEventSubject?.(action.actionId, parsed.data, data)\n\t\t\t\t\t?? { subjectType: \"AdapterInvocation\", subjectId: adapterInvocationId };\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, { status: \"succeeded\", updatedAt: now() });\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"ExternalOperationAccepted\",\n\t\t\t\t\tsubjectType: subject.subjectType,\n\t\t\t\t\tsubjectId: subject.subjectId,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\texternalReference: pendingHandoff.externalReference,\n\t\t\t\t\t\t...(pendingHandoff.dueAt ? { dueAt: pendingHandoff.dueAt.toISOString() } : {}),\n\t\t\t\t\t},\n\t\t\t\t}, `adapter:${stepIndex}:accepted`);\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"AdapterInvocationSucceeded\",\n\t\t\t\t\tsubjectType: subject.subjectType,\n\t\t\t\t\tsubjectId: subject.subjectId,\n\t\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation, recovered: true },\n\t\t\t\t}, `adapter:${stepIndex}:succeeded`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst adapterEventSubject = options.adapterEventSubject?.(\n\t\t\t\taction.actionId,\n\t\t\t\tparsed.data,\n\t\t\t\tdata,\n\t\t\t) ?? { subjectType: \"AdapterInvocation\", subjectId: adapterInvocationId };\n\t\t\tconst recordedInput = options.redactAdapterInput\n\t\t\t\t? options.redactAdapterInput(\n\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\tstep.adapterType,\n\t\t\t\t\t\tstep.operation,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t)\n\t\t\t\t: input;\n\t\t\tconst startedAt = now();\n\t\t\tconst record: AdapterInvocationRecord = {\n\t\t\t\tid: adapterInvocationId,\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\tadapterType: step.adapterType,\n\t\t\t\toperation: step.operation,\n\t\t\t\tvendor: adapter.vendor,\n\t\t\t\tstatus: \"running\",\n\t\t\t\tinput: recordedInput,\n\t\t\t\tattempt: 1,\n\t\t\t\tcreatedAt: startedAt,\n\t\t\t\tupdatedAt: startedAt,\n\t\t\t};\n\t\t\tawait options.store.createAdapterInvocation(record);\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"AdapterInvocationStarted\",\n\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t}, `adapter:${stepIndex}:started`);\n\t\t\tlet adapterDeadlineTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t\ttry {\n\t\t\t\tconst adapterController = options.adapterDeadlineMs\n\t\t\t\t\t? new AbortController()\n\t\t\t\t\t: undefined;\n\t\t\t\tconst deadlineMs = options.adapterDeadlineMs\n\t\t\t\t\t? now().getTime() + options.adapterDeadlineMs\n\t\t\t\t\t: undefined;\n\t\t\t\tif (adapterController && deadlineMs) {\n\t\t\t\t\tconst remaining = deadlineMs - now().getTime();\n\t\t\t\t\tif (remaining <= 0) {\n\t\t\t\t\t\tthrow new Error(`Adapter deadline already expired before execution: ${step.adapterType}:${step.operation}`);\n\t\t\t\t\t}\n\t\t\t\t\tadapterDeadlineTimer = setTimeout(\n\t\t\t\t\t\t() => adapterController.abort(new Error(\"Adapter deadline exceeded\")),\n\t\t\t\t\t\tremaining,\n\t\t\t\t\t);\n\t\t\t\t\tadapterDeadlineTimer.unref?.();\n\t\t\t\t}\n\t\t\t\tconst result = await executeWithAdapterRetry({\n\t\t\t\t\tpolicy: step.retryPolicy ?? adapter.retryPolicy,\n\t\t\t\t\tdefaultIdempotent: adapter.idempotent,\n\t\t\t\t\texecute: async (attempt, maxAttempts) => {\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn adapter.execute(input, {\n\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t...(invocation.causationId\n\t\t\t\t\t\t\t\t? { causationId: invocation.causationId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t\t...(deadlineMs ? { deadlineMs } : {}),\n\t\t\t\t\t\t\t...(adapterController ? { signal: adapterController.signal } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tisSuccessful: (result) => result.success,\n\t\t\t\t\tgetError: (result) => result.error,\n\t\t\t\t\tclassifyOutcome: (result) => result.outcome ?? \"transient_failure\",\n\t\t\t\t\tclassifyThrownError: (error) => {\n\t\t\t\t\t\tif (adapterController?.signal.aborted) return \"timeout\";\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tif (/timeout|deadline|timed?\\s*out/i.test(message)) return \"timeout\";\n\t\t\t\t\t\treturn \"transient_failure\";\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tassertAdapterOutcomeConsistency(result as import(\"@fabricorg/platform\").AdapterExecutionResult);\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tconst outcome = result.outcome ?? \"transient_failure\";\n\t\t\t\t\tif (outcome === \"ambiguous\") {\n\t\t\t\t\t\tconst evidence = result.outcomeEvidence;\n\t\t\t\t\t\tconst message = result.error ?? \"Adapter outcome is ambiguous; external effect may or may not have been applied\";\n\t\t\t\t\t\tconst adapterReconciliation: AdapterReconciliationOutcome = {\n\t\t\t\t\t\t\tkind: \"adapter_outcome_ambiguous\",\n\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\tvendor: adapter.vendor,\n\t\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\t\t...(evidence?.reason ?? result.error ? { reason: evidence?.reason ?? result.error } : {}),\n\t\t\t\t\t\t\t...(evidence?.externalReference ? { externalReference: evidence.externalReference } : {}),\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\t\tstatus: \"ambiguous\",\n\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\t\teventType: \"AdapterInvocationAmbiguous\",\n\t\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\t\t...(evidence?.externalReference ? { externalReference: evidence.externalReference } : {}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, `adapter:${stepIndex}:ambiguous`);\n\t\t\t\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\t\t\t\tif (governanceStore && evidence) {\n\t\t\t\t\t\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\t\t\t\t\t\tid: lifecycleId(\"rec\", actionInvocationId, `${adapter.vendor}:${adapterInvocationId}`),\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tprovider: adapter.vendor,\n\t\t\t\t\t\t\t\t...(evidence.externalReference ? { externalOperationId: evidence.externalReference } : {}),\n\t\t\t\t\t\t\t\tattempt: 1,\n\t\t\t\t\t\t\t\treason: message,\n\t\t\t\t\t\t\t\tobservedAt: now(),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\t\t\tstatus: \"reconciliation_required\",\n\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\tadapterReconciliation,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn withConsistency(\n\t\t\t\t\t\t\t{ actionInvocationId, status: \"reconciliation_required\" as const, error: message, adapterReconciliation },\n\t\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: result.error ?? \"Adapter failed\",\n\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t});\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"AdapterInvocationFailed\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t\t\t}, `adapter:${stepIndex}:failed`);\n\t\t\t\t\treturn fail(invocation, \"failed\", result.error ?? \"Adapter failed\");\n\t\t\t\t}\n\t\t\t\tconst resultRecord = result as unknown as Record<string, unknown>;\n\t\t\t\tconst output = isRecord(resultRecord.output)\n\t\t\t\t\t? resultRecord.output\n\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(resultRecord).filter(\n\t\t\t\t\t\t\t\t([key]) => key !== \"success\" && key !== \"error\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\tconst handoff = (result as import(\"@fabricorg/platform\").AdapterExecutionResult).acceptedExternalOperation;\n\t\t\t\tif (handoff) {\n\t\t\t\t\tconst reference = typeof handoff.externalReference === \"string\" ? handoff.externalReference.trim() : \"\";\n\t\t\t\t\tif (reference === \"\") {\n\t\t\t\t\t\t// The effect is in flight and nothing can ever complete it.\n\t\t\t\t\t\tconst message = `Adapter ${step.adapterType}:${step.operation} accepted an external operation without a reference to complete it by; the external effect may be in flight.`;\n\t\t\t\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\t\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: message }, action.actionId);\n\t\t\t\t\t}\n\t\t\t\t\tconst acceptedAt = now();\n\t\t\t\t\tconst deadlineMs = action.execution?.completionDeadlineMs;\n\t\t\t\t\tconst accepted: PendingExternalCompletion = {\n\t\t\t\t\t\tprovider: adapter.vendor,\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\texternalReference: reference,\n\t\t\t\t\t\tacceptedAt,\n\t\t\t\t\t\t...(deadlineMs ? { dueAt: new Date(acceptedAt.getTime() + deadlineMs) } : {}),\n\t\t\t\t\t};\n\t\t\t\t\tconst completion = action.execution?.completion ?? \"immediate\";\n\t\t\t\t\tconst refuse = completion === \"immediate\"\n\t\t\t\t\t\t? `Adapter ${step.adapterType}:${step.operation} handed off external operation \"${reference}\" but ${action.actionId} declares immediate completion; the external effect may be in flight.`\n\t\t\t\t\t\t: pendingHandoff\n\t\t\t\t\t\t\t? `Adapter ${step.adapterType}:${step.operation} handed off a second external operation \"${reference}\" while \"${pendingHandoff.externalReference}\" is already pending; one invocation waits on one completion.`\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (refuse) {\n\t\t\t\t\t\t// The handoff already happened, so this is not a clean failure:\n\t\t\t\t\t\t// somebody has to look, with the reference in hand. The first\n\t\t\t\t\t\t// reference is kept on the invocation so its callback can still\n\t\t\t\t\t\t// land as evidence; the refused one goes to the reconciliation\n\t\t\t\t\t\t// log. The invocation is written first: if the log is not\n\t\t\t\t\t\t// there, the reference must not go with it.\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, { status: \"succeeded\", output, updatedAt: now() });\n\t\t\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\t\t\tstatus: \"reconciliation_required\",\n\t\t\t\t\t\t\terror: refuse,\n\t\t\t\t\t\t\t...(pendingHandoff ? {} : { pendingCompletion: accepted }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlet error = refuse;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait externalCompletion.recordCompletionReconciliation(invocation, { externalReference: reference, provider: adapter.vendor }, refuse);\n\t\t\t\t\t\t} catch (logError) {\n\t\t\t\t\t\t\t// The lease is already gone with the terminal status above, so\n\t\t\t\t\t\t\t// this write must not fence on it.\n\t\t\t\t\t\t\terror = `${refuse} Reconciliation log unavailable: ${errorMessage(logError)}`;\n\t\t\t\t\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { error });\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn withConsistency({\n\t\t\t\t\t\t\tactionInvocationId, status: \"reconciliation_required\" as const, error,\n\t\t\t\t\t\t\t...(pendingHandoff ? { pendingCompletion: pendingHandoff } : { pendingCompletion: accepted }),\n\t\t\t\t\t\t}, action.actionId);\n\t\t\t\t\t}\n\t\t\t\t\tpendingHandoff = accepted;\n\t\t\t\t\t// Durable before the step is marked done: see the note above the loop.\n\t\t\t\t\tawait persistInvocation(invocation, { pendingCompletion: accepted });\n\t\t\t\t\tinvocation = { ...invocation, pendingCompletion: accepted };\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"ExternalOperationAccepted\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\texternalReference: reference,\n\t\t\t\t\t\t\t...(accepted.dueAt ? { dueAt: accepted.dueAt.toISOString() } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}, `adapter:${stepIndex}:accepted`);\n\t\t\t\t}\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"succeeded\",\n\t\t\t\t\toutput,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\tif (options.extractExecutionAttestation) {\n\t\t\t\t\tconst attestation = await options.extractExecutionAttestation({\n\t\t\t\t\t\tactionInvocationId, adapterInvocationId, adapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation, vendor: adapter.vendor, input: recordedInput,\n\t\t\t\t\t\tstartedAt, completedAt: now(), output,\n\t\t\t\t\t});\n\t\t\t\t\tif (attestation) {\n\t\t\t\t\t\tawait recordExecutionAttestation(actionInvocationId, tenantId, spaceId, attestation, adapterInvocationId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"AdapterInvocationSucceeded\",\n\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\tinput: recordedInput,\n\t\t\t\t\t\toutput,\n\t\t\t\t\t},\n\t\t\t\t}, `adapter:${stepIndex}:succeeded`);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = errorMessage(error);\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: message,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\treturn fail(invocation, \"failed\", message);\n\t\t\t} finally {\n\t\t\t\tif (adapterDeadlineTimer) clearTimeout(adapterDeadlineTimer);\n\t\t\t}\n\t\t}\n\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (governanceStore && options.resolvePolicyObligations) {\n\t\t\tconst obligations = await governanceStore.listPolicyObligations(actionInvocationId, tenantId, spaceId);\n\t\t\tconst unsatisfied = obligations.filter((obligation) => (obligation.required ?? true) && obligation.status !== \"satisfied\" && obligation.status !== \"waived\");\n\t\t\tif (unsatisfied.length > 0) {\n\t\t\t\tconst message = `Unsatisfied policy obligations: ${unsatisfied.map((item) => item.id).join(\", \")}`;\n\t\t\t\tif (pendingHandoff) {\n\t\t\t\t\t// The external effect is in flight and the evidence that would\n\t\t\t\t\t// have satisfied these may have died with a worker; somebody\n\t\t\t\t\t// has to look rather than the row saying it failed cleanly.\n\t\t\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\t\t\tlet error = message;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait externalCompletion.recordCompletionReconciliation(invocation, { externalReference: pendingHandoff.externalReference, provider: pendingHandoff.provider, kind: \"obligations\" }, message);\n\t\t\t\t\t} catch (logError) {\n\t\t\t\t\t\terror = `${message} Reconciliation log unavailable: ${errorMessage(logError)}`;\n\t\t\t\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { error });\n\t\t\t\t\t}\n\t\t\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error, pendingCompletion: pendingHandoff }, action.actionId);\n\t\t\t\t}\n\t\t\t\treturn fail(invocation, \"failed\", message);\n\t\t\t}\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data, eventResultFields);\n\t\t// A handoff leaves the invocation running, without a lease, until the\n\t\t// external system completes it by reference. Domain events still go out\n\t\t// now: the handler's writes committed, and what is pending is the\n\t\t// external outcome, not the domain state.\n\t\tconst parked: PendingExternalCompletion | undefined = pendingHandoff ? { ...pendingHandoff, parkedAt: now() } : undefined;\n\t\tconst finalPatch: ActionInvocationPatch = parked\n\t\t\t? { status: \"running\", result, pendingCompletion: parked }\n\t\t\t: { status: \"completed\", result };\n\t\ttry {\n\t\t\tconst atomicStore = asAtomicMutationStore(options.store);\n\t\t\tif (action.eventPhase === \"after_adapters\" && atomicStore) {\n\t\t\t\tawait atomicStore.transactionWithEvents(async (transaction) => {\n\t\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\t\tawait appendEvent(\n\t\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t`domain:${index}`,\n\t\t\t\t\t\t\taction.version,\n\t\t\t\t\t\t\ttransaction,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (invocation.leaseOwner && invocation.leaseToken !== undefined) {\n\t\t\t\t\t\tif (!transaction.updateLeasedActionInvocation) {\n\t\t\t\t\t\t\tthrow new Error(\"Leased atomic finalization requires transaction-scoped fencing support.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst updated = await transaction.updateLeasedActionInvocation({\n\t\t\t\t\t\t\tid: actionInvocationId, tenantId, spaceId,\n\t\t\t\t\t\t\tworkerId: invocation.leaseOwner, leaseToken: invocation.leaseToken,\n\t\t\t\t\t\t\tpatch: finalPatch,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!updated) throw new RecoverableFinalizationError(`Invocation lease lost: ${actionInvocationId}`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait transaction.updateActionInvocation(\n\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\tfinalPatch,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!pendingHandoff) {\n\t\t\t\t\temitInvocationStatusTelemetry(\n\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\"completed\",\n\t\t\t\t\t\toptions.telemetry,\n\t\t\t\t\t\tnow(),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (action.eventPhase === \"after_adapters\") {\n\t\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait persistInvocation(invocation, finalPatch);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (action.eventPhase === \"after_adapters\") {\n\t\t\t\tthrow new RecoverableFinalizationError(errorMessage(error));\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tactionInvocationId,\n\t\t\tstatus: parked ? \"running\" : \"completed\",\n\t\t\tresult,\n\t\t\t...(parked ? { pendingCompletion: parked } : {}),\n\t\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t};\n\t\t} catch (error) {\n\t\t\tif (error instanceof RecoverableFinalizationError) throw error;\n\t\t\treturn fail(invocation, \"failed\", errorMessage(error));\n\t\t}\n\t}\n\n\tasync function resumeApprovedInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: ActionApprovalDecision,\n\t): Promise<ExecuteActionResult> {\n\t\tif (!decision.approverId.trim()) throw new Error(\"approverId is required\");\n\t\tconst invocation = await options.store.getActionInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tif (isTerminal(invocation.status)) return withConsistency(actionResult(invocation), invocation.actionId);\n\t\tif (invocation.status !== \"waiting_for_approval\") {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Invocation is not waiting for approval (status: ${invocation.status})`,\n\t\t\t};\n\t\t}\n\t\tconst action = actionResolver(invocation.actionId);\n\t\tif (!action) return fail(invocation, \"failed\", `Unknown action: ${invocation.actionId}`);\n\t\tconst approvalAuthorizationInput = toAuthorizationInput(action, {\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tactorId: decision.approverId,\n\t\t\tactorType: decision.approverType,\n\t\t});\n\t\tconst entitled = await options.authorization.checkEntitlement(\n\t\t\tapprovalAuthorizationInput,\n\t\t);\n\t\tconst authorized = options.authorization.authorizeApproval\n\t\t\t? await options.authorization.authorizeApproval({\n\t\t\t\t\t...approvalAuthorizationInput,\n\t\t\t\t\tdecision,\n\t\t\t\t})\n\t\t\t: await options.authorization.authorize(approvalAuthorizationInput);\n\t\tif (!entitled || !authorized) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Actor ${decision.approverId} is not authorized to decide this approval`,\n\t\t\t};\n\t\t}\n\t\tconst approvalStore = asApprovalStore(options.store);\n\t\tif (!approvalStore) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: \"Approval resume requires a store with approval persistence support.\",\n\t\t\t};\n\t\t}\n\t\tconst transitionStartedAt = now();\n\t\tconst decidedAt = decision.decidedAt ?? transitionStartedAt;\n\t\tconst leaseOwner = `approval-resume-${createFabricId(\"lease\")}`;\n\t\tconst transition = await approvalStore.beginApprovalDecision({\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tdecision: { ...decision, decidedAt },\n\t\t\tleaseOwner,\n\t\t\tleaseDurationMs: options.approvalResumeLeaseDurationMs ?? 5 * 60_000,\n\t\t\tnow: transitionStartedAt,\n\t\t});\n\t\tconst transitioned =\n\t\t\ttransition.invocation ??\n\t\t\t(await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId));\n\t\tif (!transition.applied || !transitioned) {\n\t\t\tif (!transitioned) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\t\treturn withConsistency(actionResult(transitioned), transitioned.actionId);\n\t\t}\n\t\tif (!decision.approved) {\n\t\t\temitInvocationStatusTelemetry(\n\t\t\t\ttransitioned,\n\t\t\t\t\"failed\",\n\t\t\t\toptions.telemetry,\n\t\t\t\tnow(),\n\t\t\t\t\"waiting_for_approval\",\n\t\t\t);\n\t\t\treturn withConsistency(actionResult(transitioned), transitioned.actionId);\n\t\t}\n\t\treturn executeInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\t{ leaseOwner, leaseToken: transitioned.leaseToken },\n\t\t\t\"approval_resume\",\n\t\t);\n\t}\n\n\tasync function recordExecutionAttestation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tattestation: ExecutionAttestation,\n\t\tadapterInvocationId?: string,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"Execution attestations require a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tconst id = lifecycleId(\"att\", actionInvocationId, adapterInvocationId ?? `${attestation.provider}:${attestation.operation}:${attestation.externalOperationId ?? \"external\"}`);\n\t\tawait governanceStore.appendExecutionAttestation({\n\t\t\t...attestation, id, actionInvocationId, tenantId, spaceId,\n\t\t\t...(adapterInvocationId ? { adapterInvocationId } : {}), recordedAt: now(),\n\t\t});\n\t\tfor (const obligationId of attestation.satisfiesObligations ?? []) {\n\t\t\tawait governanceStore.updatePolicyObligation(actionInvocationId, obligationId, \"satisfied\", attestation.evidenceReferences);\n\t\t}\n\t}\n\n\tasync function recordExternalReconciliation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\treconciliation: ExternalReconciliation,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"External reconciliation requires a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\t...reconciliation,\n\t\t\tid: lifecycleId(\"rec\", actionInvocationId, `${reconciliation.provider}:${reconciliation.attempt}`),\n\t\t\tactionInvocationId, tenantId, spaceId,\n\t\t});\n\t}\n\n\t/** Consistency is a property of the action, not of the invocation, so it is read rather than stored. */\n\tfunction declaredConsistency(actionId: ActionId): \"authoritative-now\" | \"provisional-until-reconciled\" | undefined {\n\t\treturn actionResolver(actionId)?.execution?.consistency;\n\t}\n\n\t/**\n\t * Decorates every result leaving the Host, not only a freshly executed one, so an\n\t * idempotent replay reports the same consistency as the original submission.\n\t */\n\tfunction withConsistency<TResult extends { actionInvocationId: string }>(result: TResult, actionId: ActionId): TResult {\n\t\tconst consistency = declaredConsistency(actionId);\n\t\treturn consistency ? { ...result, consistency } : result;\n\t}\n\n\tasync function appendEvent(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\tactionId: ActionId;\n\t\t\tactionVersion: number;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\tactorId: string;\n\t\t\tactorType: string;\n\t\t\tcorrelationId: string;\n\t\t\tcausationId?: string;\n\t\t\tprovenance?: ActionInvocationRecord[\"provenance\"];\n\t\t},\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion = 1,\n\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t): Promise<void> {\n\t\tconst timestamp = now();\n\t\tconst envelope: AssetEventEnvelope = {\n\t\t\tid: lifecycleId(\"evt\", invocation.id, deduplicationKey),\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\teventType: event.eventType,\n\t\t\teventSchemaVersion: event.eventSchemaVersion ?? defaultEventSchemaVersion,\n\t\t\tsubjectType: event.subjectType,\n\t\t\tsubjectId: event.subjectId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tactionInvocationId: invocation.id,\n\t\t\tpayload: event.payload,\n\t\t\tsequence: await (transaction ?? options.store).nextEventSequence(\n\t\t\t\tinvocation.tenantId,\n\t\t\t\tinvocation.spaceId,\n\t\t\t),\n\t\t\toccurredAt: timestamp,\n\t\t\trecordedAt: timestamp,\n\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t\t...(invocation.provenance ? { provenance: { source: invocation.provenance.source, ...(invocation.provenance.auditAttributes ? { auditAttributes: invocation.provenance.auditAttributes } : {}) } } : {}),\n\t\t\t...(declaredConsistency(invocation.actionId) === \"provisional-until-reconciled\" ? { consistency: \"provisional-until-reconciled\" as const } : {}),\n\t\t};\n\t\tif (options.outbox) {\n\t\t\tconst hostLifecycleEvent = new Set([\"AdapterInvocationStarted\", \"AdapterInvocationSucceeded\", \"AdapterInvocationFailed\", \"ExternalOperationAccepted\", \"ExternalOperationCompleted\", \"ExternalOperationFailed\", \"ExternalOperationContradicted\", \"ComplianceBlocked\"]).has(envelope.eventType);\n\t\t\tconst shouldPublish = options.outbox.shouldPublish?.(envelope) ?? !hostLifecycleEvent;\n\t\t\tif (!shouldPublish) {\n\t\t\t\tawait (transaction ?? options.store).appendEvent(envelope);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst traceContext = options.outbox.traceContext?.(envelope);\n\t\t\tconst payloadClassification = options.outbox.classifyPayload(envelope);\n\t\t\tconst metadata = {\n\t\t\t\tproducerModuleVersion: options.outbox.producerModuleVersion(invocation.actionId, invocation.actionVersion),\n\t\t\t\tpayloadClassification,\n\t\t\t\tincludeProvenance: options.outbox.includeProvenance?.(envelope, payloadClassification) ?? payloadClassification !== \"restricted\",\n\t\t\t\t...(traceContext ? { traceContext } : {}),\n\t\t\t};\n\t\t\tif (transaction) {\n\t\t\t\tif (!transaction.appendEventWithOutbox) throw new Error(\"Outbox egress requires an atomic transaction with appendEventWithOutbox.\");\n\t\t\t\tawait transaction.appendEventWithOutbox(envelope, metadata);\n\t\t\t} else {\n\t\t\t\tconst outboxStore = asOutboxStore(options.store);\n\t\t\t\tif (!outboxStore) throw new Error(\"Outbox egress requires an outbox-capable Platform Host store.\");\n\t\t\t\tawait outboxStore.appendEventWithOutbox(envelope, metadata);\n\t\t\t}\n\t\t} else {\n\t\t\tawait (transaction ?? options.store).appendEvent(envelope);\n\t\t}\n\t}\n\n\tasync function fail(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\thitlRoute?: ActionInvocationRecord[\"hitlRoute\"];\n\t\t\thitlRiskTier?: ActionInvocationRecord[\"hitlRiskTier\"];\n\t\t},\n\t\tstatus: Extract<ActionStatus, \"failed\" | \"blocked_by_policy\" | \"validation_failed\">,\n\t\terror: string,\n\t): Promise<ExecuteActionResult> {\n\t\tawait persistInvocation(invocation as ActionInvocationRecord, { status, error });\n\t\treturn {\n\t\t\tactionInvocationId: invocation.id,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t};\n\t}\n\n\tasync function persistInvocation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tpatch: import(\"./types\").ActionInvocationPatch,\n\t): Promise<void> {\n\t\tconst previousStatus = invocation.status;\n\t\tif (invocation.leaseOwner && invocation.leaseToken !== undefined) {\n\t\t\tconst recoverable = options.store as Partial<RecoverablePlatformHostStore<TDb>>;\n\t\t\tif (!recoverable.updateLeasedActionInvocation) {\n\t\t\t\tthrow new Error(\"Leased execution requires a fencing-capable PlatformHostStore.\");\n\t\t\t}\n\t\t\tconst updated = await recoverable.updateLeasedActionInvocation({\n\t\t\t\tid: invocation.id,\n\t\t\t\ttenantId: invocation.tenantId,\n\t\t\t\tspaceId: invocation.spaceId,\n\t\t\t\tworkerId: invocation.leaseOwner,\n\t\t\t\tleaseToken: invocation.leaseToken,\n\t\t\t\tpatch,\n\t\t\t});\n\t\t\tif (!updated) throw new RecoverableFinalizationError(`Invocation lease lost: ${invocation.id}`);\n\t\t\temitInvocationStatusTelemetry(invocation, patch.status, options.telemetry, now(), previousStatus);\n\t\t\treturn;\n\t\t}\n\t\tawait options.store.updateActionInvocation(\n\t\t\tinvocation.id,\n\t\t\tinvocation.tenantId,\n\t\t\tinvocation.spaceId,\n\t\t\tpatch,\n\t\t);\n\t\temitInvocationStatusTelemetry(invocation, patch.status, options.telemetry, now(), previousStatus);\n\t}\n\n\tconst externalCompletion = createExternalCompletionLifecycle<TDb>({\n\t\tstore: options.store,\n\t\ttelemetry: options.telemetry,\n\t\teventResultFields,\n\t\tnow,\n\t\tactionResolver,\n\t\tappendEvent,\n\t\tpersistInvocation,\n\t\tactionResult,\n\t\twithConsistency,\n\t});\n\n\treturn {\n\t\tsubmitAction,\n\t\texecuteInvocation,\n\t\tresumeApprovedInvocation,\n\t\trecordExecutionAttestation,\n\t\trecordExternalReconciliation,\n\t\tcompleteExternalInvocation: externalCompletion.completeExternalInvocation,\n\t\treconcileOverdueCompletions: externalCompletion.reconcileOverdueCompletions,\n\t};\n}\n\nfunction actionResult(invocation: ActionInvocationRecord): ExecuteActionResult {\n\treturn {\n\t\tactionInvocationId: invocation.id,\n\t\tstatus: invocation.status,\n\t\tresult: invocation.result,\n\t\t...(invocation.error ? { error: invocation.error } : {}),\n\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t...(invocation.authorizationReconciliation ? { reconciliation: invocation.authorizationReconciliation } : {}),\n\t\t...(invocation.adapterReconciliation ? { adapterReconciliation: invocation.adapterReconciliation } : {}),\n\t\t...(invocation.pendingCompletion ? { pendingCompletion: invocation.pendingCompletion } : {}),\n\t};\n}\n\nfunction asApprovalStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): ApprovalPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<ApprovalPlatformHostStore<TDb>>;\n\treturn typeof candidate.recordHitlDecision === \"function\" &&\n\t\ttypeof candidate.beginApprovalDecision === \"function\"\n\t\t? (store as ApprovalPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nfunction asOutboxStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): OutboxPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<OutboxPlatformHostStore<TDb>>;\n\treturn typeof candidate.appendEventWithOutbox === \"function\" &&\n\t\ttypeof candidate.claimOutbox === \"function\"\n\t\t? (store as OutboxPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction isRiskTier(value: unknown): value is \"low\" | \"medium\" | \"high\" {\n\treturn value === \"low\" || value === \"medium\" || value === \"high\";\n}\n\nfunction toAuthorizationInput<TDb>(\n\taction: ActionDefinition<TDb>,\n\tinput: {\n\t\ttenantId: string;\n\t\tspaceId: string;\n\t\tactorId: string;\n\t\tactorType: import(\"@fabricorg/platform\").ActorType;\n\t},\n): ActionAuthorizationInput {\n\treturn {\n\t\tactionId: action.actionId,\n\t\tnamespace: action.namespace,\n\t\trequiredPermissions: action.requiredPermissions ?? [],\n\t\trequiredRoles: action.requiredRoles ?? [],\n\t\ttenantId: input.tenantId,\n\t\tspaceId: input.spaceId,\n\t\tactorId: input.actorId,\n\t\tactorType: input.actorType,\n\t};\n}\n\nfunction declaredPolicies(policyIds: readonly string[]): RuntimePolicyDefinition[] {\n\treturn policyIds.map((policyId) => ({\n\t\tpolicyId: policyId as `${string}.v${number}`,\n\t\tpolicyVersion: Number(policyId.split(\".v\").at(-1) ?? 1),\n\t\tkind: \"code\",\n\t\tcodeEvaluatorPolicyId: policyId as `${string}.v${number}`,\n\t}));\n}\n\nfunction initialState(machine: import(\"@fabricorg/platform\").StateMachineDefinition | undefined): string {\n\treturn Object.values(machine?.states ?? {}).find((state) => state.stateClass === \"initial\")?.id ?? \"none\";\n}\n\nfunction isTerminal(status: ActionStatus): boolean {\n\treturn [\"completed\", \"failed\", \"blocked_by_policy\", \"reconciliation_required\", \"validation_failed\"].includes(status);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction validateAuthorizationBinding(\n\tinput: SubmitActionInput,\n\tparameterDigest: string,\n\tauthorityMoment?: \"capture\" | \"execution\" | \"both\",\n\tcurrentTime = new Date(),\n): void {\n\tconst binding = input.authorizationBinding!;\n\tif (binding.id !== input.authorizationBindingId && input.authorizationBindingId) throw new Error(\"Authorization binding ID does not match authorizationBindingId.\");\n\tif (binding.tenantId !== input.tenantId || binding.actorId !== input.actorId || binding.actionId !== input.actionId || binding.parameterDigest !== parameterDigest) {\n\t\tthrow new Error(\"Authorization binding does not match the submitted command identity.\");\n\t}\n\tif (authorityMoment && binding.governingMoment !== authorityMoment) throw new Error(\"Authorization binding governingMoment does not match the action execution contract.\");\n\tconst capturedAt = Date.parse(binding.capturedAt);\n\tconst expiresAt = binding.expiresAt === undefined ? undefined : Date.parse(binding.expiresAt);\n\tif (!Number.isFinite(capturedAt) || (expiresAt !== undefined && !Number.isFinite(expiresAt))) {\n\t\tthrow new Error(\"Authorization binding timestamps must be valid ISO-8601 values.\");\n\t}\n\tif (expiresAt !== undefined && (expiresAt <= capturedAt || (authorityMoment === \"capture\" && expiresAt <= currentTime.getTime()))) {\n\t\tthrow new Error(\"Authorization binding must be unexpired at capture and expire after capturedAt.\");\n\t}\n}\n\nfunction idempotencyConflict(\n\texisting: ActionInvocationRecord,\n\tincoming: { actorId: string; authorizationBindingId?: string; actionVersion: number; parameterDigest: string; idempotencyKey: string },\n): IdempotencyConflict | undefined {\n\tconst reasons: IdempotencyConflict[\"reasons\"] = [];\n\tif ((existing.idempotencyActorId ?? existing.actorId) !== incoming.actorId) reasons.push(\"actor\");\n\tif ((existing.idempotencyAuthorizationBindingId ?? existing.authorizationBindingId) !== incoming.authorizationBindingId) reasons.push(\"authority_binding\");\n\tif (existing.actionVersion !== incoming.actionVersion) reasons.push(\"action_version\");\n\tif (existing.parameterDigest !== incoming.parameterDigest) reasons.push(\"parameters\");\n\treturn reasons.length ? { code: \"IDEMPOTENCY_CONFLICT\", idempotencyKey: incoming.idempotencyKey, existingInvocationId: existing.id, reasons } : undefined;\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tEnterpriseEventEnvelope,\n\tOutboxEventMetadata,\n\tOutboxPlatformHostStore,\n\tOutboxRecord,\n} from \"./types\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n\ttype PlatformHostTelemetry,\n\ttype PlatformHostTelemetryEventName,\n} from \"./observability\";\n\nexport function toEnterpriseEventEnvelope(\n\tevent: AssetEventEnvelope,\n\tmetadata: OutboxEventMetadata,\n): EnterpriseEventEnvelope {\n\treturn {\n\t\teventId: event.id,\n\t\teventType: event.eventType,\n\t\teventSchemaVersion: event.eventSchemaVersion,\n\t\ttenantId: event.tenantId,\n\t\tspaceId: event.spaceId,\n\t\tsubjectType: event.subjectType,\n\t\tsubjectId: event.subjectId,\n\t\tsequence: event.sequence,\n\t\t...(event.actionInvocationId ? { actionInvocationId: event.actionInvocationId } : {}),\n\t\tcorrelationId: event.correlationId,\n\t\t...(event.causationId ? { causationId: event.causationId } : {}),\n\t\toccurredAt: event.occurredAt,\n\t\trecordedAt: event.recordedAt,\n\t\tproducerModuleVersion: metadata.producerModuleVersion,\n\t\tpayloadClassification: metadata.payloadClassification,\n\t\t...(metadata.traceContext ? { traceContext: { ...metadata.traceContext } } : {}),\n\t\t...(metadata.includeProvenance && event.provenance ? { provenance: event.provenance } : {}),\n\t\t// A provisional fact must stay marked as provisional once it leaves the platform.\n\t\t...(event.consistency ? { consistency: event.consistency } : {}),\n\t\tpayload: event.payload,\n\t};\n}\n\nexport interface EnterpriseEventPublisher {\n\tpublish(event: EnterpriseEventEnvelope, context?: { signal: AbortSignal }): Promise<void>;\n}\n\nexport interface OutboxRelayOptions<TDb> {\n\tstore: OutboxPlatformHostStore<TDb>;\n\tpublisher: EnterpriseEventPublisher;\n\tworkerId: string;\n\tleaseDurationMs?: number;\n\tleaseRenewalIntervalMs?: number;\n\tpublishTimeoutMs?: number;\n\tbatchSize?: number;\n\tmaxAttempts?: number;\n\tretryDelayMs?: (attempt: number) => number;\n\tnow?: () => Date;\n\ttelemetry?: PlatformHostTelemetry;\n}\n\nexport interface OutboxRelayResult {\n\tclaimed: number;\n\tpublished: number;\n\tfailed: number;\n\tdeadLettered: number;\n}\n\nexport async function runOutboxRelayCycle<TDb>(\n\toptions: OutboxRelayOptions<TDb>,\n): Promise<OutboxRelayResult> {\n\tconst now = options.now ?? (() => new Date());\n\tconst maxAttempts = options.maxAttempts ?? 10;\n\tconst leaseDurationMs = options.leaseDurationMs ?? 30_000;\n\temitRelayTelemetry(options.telemetry, \"outbox.relay.started\", now(), options.workerId);\n\tlet records: OutboxRecord[];\n\ttry {\n\t\trecords = await options.store.claimOutbox({\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseDurationMs,\n\t\t\tlimit: options.batchSize ?? 100,\n\t\t\tnow: now(),\n\t\t});\n\t} catch (error) {\n\t\temitRelayTelemetry(options.telemetry, \"outbox.relay.failed\", now(), options.workerId);\n\t\tthrow error;\n\t}\n\tfor (const record of records) {\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"outbox.lease_claimed\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxLeaseClaimed,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId: record.tenantId,\n\t\t\tspaceId: record.spaceId,\n\t\t\tattributes: { attempt: record.attemptCount },\n\t\t});\n\t}\n\tconst result: OutboxRelayResult = { claimed: records.length, published: 0, failed: 0, deadLettered: 0 };\n\tfor (const record of records) {\n\t\tconst stopHeartbeat = startOutboxHeartbeat(options, record, leaseDurationMs);\n\t\ttry {\n\t\t\tawait publishWithTimeout(\n\t\t\t\toptions.publisher,\n\t\t\t\trecord.event,\n\t\t\t\toptions.publishTimeoutMs ?? 10_000,\n\t\t\t);\n\t\t\tawait stopHeartbeat();\n\t\t\ttry {\n\t\t\t\tawait options.store.markOutboxPublished(record.id, options.workerId, now(), record.leaseToken);\n\t\t\t} catch {\n\t\t\t\t// Publishing may already have succeeded. Leave the row for lease expiry and\n\t\t\t\t// replay with the same immutable event ID; do not claim completion.\n\t\t\t\tresult.failed += 1;\n\t\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tname: \"outbox.failed\",\n\t\t\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxFailed,\n\t\t\t\t\toccurredAt: now(),\n\t\t\t\t\ttenantId: record.tenantId,\n\t\t\t\t\tspaceId: record.spaceId,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.published += 1;\n\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\tkind: \"event\",\n\t\t\t\tname: \"outbox.published\",\n\t\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxPublished,\n\t\t\t\toccurredAt: now(),\n\t\t\t\ttenantId: record.tenantId,\n\t\t\t\tspaceId: record.spaceId,\n\t\t\t});\n\t\t} catch {\n\t\t\tawait stopHeartbeat();\n\t\t\tconst deadLetter = record.attemptCount >= maxAttempts;\n\t\t\ttry {\n\t\t\t\tawait options.store.markOutboxFailed({\n\t\t\t\t\tid: record.id,\n\t\t\t\t\tworkerId: options.workerId,\n\t\t\t\t\tleaseToken: record.leaseToken,\n\t\t\t\t\terror: \"Event publisher failed\",\n\t\t\t\t\tavailableAt: new Date(now().getTime() + (options.retryDelayMs?.(record.attemptCount) ?? 1_000)),\n\t\t\t\t\tdeadLetter,\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// Lease loss is recoverable by a later relay; continue the current batch.\n\t\t\t}\n\t\t\tresult.failed += 1;\n\t\t\tif (deadLetter) result.deadLettered += 1;\n\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\tkind: \"event\",\n\t\t\t\tname: deadLetter ? \"outbox.dead_lettered\" : \"outbox.failed\",\n\t\t\t\tmetricName: deadLetter\n\t\t\t\t\t? PLATFORM_HOST_METRIC_NAMES.outboxDeadLettered\n\t\t\t\t\t: PLATFORM_HOST_METRIC_NAMES.outboxFailed,\n\t\t\t\toccurredAt: now(),\n\t\t\t\ttenantId: record.tenantId,\n\t\t\t\tspaceId: record.spaceId,\n\t\t\t\tattributes: { attempt: record.attemptCount },\n\t\t\t});\n\t\t}\n\t}\n\temitRelayTelemetry(options.telemetry, \"outbox.relay.completed\", now(), options.workerId, {\n\t\tclaimed: result.claimed,\n\t\tpublished: result.published,\n\t\tfailed: result.failed,\n\t\tdeadLettered: result.deadLettered,\n\t});\n\treturn result;\n}\n\nasync function publishWithTimeout(\n\tpublisher: EnterpriseEventPublisher,\n\tevent: EnterpriseEventEnvelope,\n\ttimeoutMs: number,\n): Promise<void> {\n\tif (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n\t\tthrow new Error(\"publishTimeoutMs must be a positive finite number\");\n\t}\n\tconst controller = new AbortController();\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst timeout = new Promise<never>((_, reject) => {\n\t\ttimer = setTimeout(() => {\n\t\t\tconst error = new Error(`Event publisher timed out after ${timeoutMs}ms`);\n\t\t\tcontroller.abort(error);\n\t\t\treject(error);\n\t\t}, timeoutMs);\n\t});\n\ttry {\n\t\tawait Promise.race([publisher.publish(event, { signal: controller.signal }), timeout]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\nfunction startOutboxHeartbeat<TDb>(\n\toptions: OutboxRelayOptions<TDb>,\n\trecord: OutboxRecord,\n\tleaseDurationMs: number,\n): () => Promise<void> {\n\tif (!record.leaseToken) return async () => undefined;\n\tconst intervalMs = options.leaseRenewalIntervalMs ??\n\t\tMath.max(1, Math.floor(leaseDurationMs / 3));\n\tlet stopped = false;\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet running: Promise<void> | undefined;\n\tconst schedule = () => {\n\t\tif (!stopped) timer = setTimeout(tick, intervalMs);\n\t};\n\tconst tick = () => {\n\t\trunning = options.store.renewOutboxLease({\n\t\t\tid: record.id,\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseToken: record.leaseToken!,\n\t\t\tleaseDurationMs,\n\t\t}).then(() => undefined).catch(() => undefined).finally(schedule);\n\t};\n\tschedule();\n\treturn async () => {\n\t\tstopped = true;\n\t\tif (timer) clearTimeout(timer);\n\t\tawait running;\n\t};\n}\n\nexport function cloneOutboxRecord(record: OutboxRecord): OutboxRecord {\n\treturn {\n\t\t...record,\n\t\tevent: { ...record.event, ...(record.event.traceContext ? { traceContext: { ...record.event.traceContext } } : {}) },\n\t};\n}\n\nfunction emitRelayTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tname: Extract<PlatformHostTelemetryEventName, `outbox.relay.${string}`>,\n\toccurredAt: Date,\n\tworkerId: string,\n\tattributes?: Record<string, number>,\n): void {\n\tconst metricName = name === \"outbox.relay.started\"\n\t\t? PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesStarted\n\t\t: name === \"outbox.relay.completed\"\n\t\t\t? PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesCompleted\n\t\t\t: PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesFailed;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname,\n\t\tmetricName,\n\t\toccurredAt,\n\t\tattributes: { workerId, ...attributes },\n\t});\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tApprovalDecisionTransitionResult,\n\tApprovalPlatformHostStore,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tGovernancePlatformHostStore,\n\tPolicyObligationRecord,\n\tExecutionAttestationRecord,\n\tExternalReconciliationRecord,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tRecoverablePlatformHostStore,\n\tOutboxPlatformHostStore,\n\tOutboxRecord,\n\tOutboxEventMetadata,\n\tClaimOutboxInput,\n\tOutboxStatus,\n\tPlatformHostMutationTransaction,\n} from \"./types\";\nimport { cloneOutboxRecord, toEnterpriseEventEnvelope } from \"./outbox\";\nimport type { PlatformHostHealthCounts, PlatformHostHealthQuery } from \"./observability\";\n\nexport interface MemoryPlatformHostTransactionProvider<TDb> {\n\tsnapshot(db: TDb): TDb;\n\trestore(db: TDb, snapshot: TDb): void;\n}\n\nexport class MemoryPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb>, OutboxPlatformHostStore<TDb> {\n\treadonly transactionalOutbox: boolean;\n\tdeclare transactionWithEvents?: <TResult>(run: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>) => Promise<TResult>;\n\tprivate transactionTail: Promise<void> = Promise.resolve();\n\treadonly invocations: ActionInvocationRecord[] = [];\n\treadonly policyEvaluations: PolicyEvaluationRecord[] = [];\n\treadonly adapterInvocations: AdapterInvocationRecord[] = [];\n\treadonly events: AssetEventEnvelope[] = [];\n\treadonly policyObligations: PolicyObligationRecord[] = [];\n\treadonly executionAttestations: ExecutionAttestationRecord[] = [];\n\treadonly externalReconciliations: ExternalReconciliationRecord[] = [];\n\treadonly outbox: OutboxRecord[] = [];\n\n\tconstructor(\n\t\treadonly db: TDb,\n\t\ttransactionProvider?: MemoryPlatformHostTransactionProvider<TDb>,\n\t) {\n\t\tthis.transactionalOutbox = transactionProvider !== undefined;\n\t\tif (transactionProvider) this.transactionWithEvents = (run) => this.runTransactionWithEvents(run, transactionProvider);\n\t}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tprivate async runTransactionWithEvents<TResult>(\n\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t\ttransactionProvider: MemoryPlatformHostTransactionProvider<TDb>,\n\t): Promise<TResult> {\n\t\tlet release!: () => void;\n\t\tconst previous = this.transactionTail;\n\t\tthis.transactionTail = new Promise<void>((resolve) => { release = resolve; });\n\t\tawait previous;\n\t\tlet domainSnapshot: TDb | undefined;\n\t\tlet snapshotCreated = false;\n\t\ttry {\n\t\t\tdomainSnapshot = transactionProvider.snapshot(this.db);\n\t\t\tsnapshotCreated = true;\n\t\t\tconst pendingEvents: Array<{ event: AssetEventEnvelope; metadata?: OutboxEventMetadata }> = [];\n\t\t\tconst pendingUpdates: Array<{ id: string; tenantId: string; spaceId: string; patch: import(\"./types\").ActionInvocationPatch }> = [];\n\t\t\tconst appendPending = async (event: AssetEventEnvelope, metadata?: OutboxEventMetadata) => {\n\t\t\t\tif (this.events.some((candidate) => candidate.id === event.id) || pendingEvents.some((candidate) => candidate.event.id === event.id)) return;\n\t\t\t\tpendingEvents.push({ event, ...(metadata ? { metadata } : {}) });\n\t\t\t};\n\t\t\tconst result = await run({\n\t\t\t\tdb: this.db,\n\t\t\t\tgetActionInvocationForUpdate: async (id, tenantId, spaceId) => {\n\t\t\t\t\tconst record = await this.getActionInvocation(id, tenantId, spaceId);\n\t\t\t\t\treturn record ? structuredClone(record) : undefined;\n\t\t\t\t},\n\t\t\t\tgetEvent: async (id, tenantId, spaceId) =>\n\t\t\t\t\tpendingEvents.find((candidate) =>\n\t\t\t\t\t\tcandidate.event.id === id &&\n\t\t\t\t\t\tcandidate.event.tenantId === tenantId &&\n\t\t\t\t\t\tcandidate.event.spaceId === spaceId)?.event ??\n\t\t\t\t\tthis.events.find((event) =>\n\t\t\t\t\t\tevent.id === id &&\n\t\t\t\t\t\tevent.tenantId === tenantId &&\n\t\t\t\t\t\tevent.spaceId === spaceId),\n\t\t\t\tappendEvent: (event) => appendPending(event),\n\t\t\t\tappendEventWithOutbox: (event, metadata) => appendPending(event, metadata),\n\t\t\t\tnextEventSequence: async (tenantId, spaceId) => (await this.listEvents(tenantId, spaceId)).length + pendingEvents.filter((candidate) => candidate.event.tenantId === tenantId && candidate.event.spaceId === spaceId).length + 1,\n\t\t\t\tlistEvents: async (tenantId, spaceId) => [...await this.listEvents(tenantId, spaceId), ...pendingEvents.map((candidate) => candidate.event).filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)],\n\t\t\t\tgetEntityState: async (tenantId, spaceId, entityType, entityId) => {\n\t\t\t\t\tlet state = await this.getEntityState(tenantId, spaceId, entityType, entityId);\n\t\t\t\t\tfor (const pending of pendingEvents) {\n\t\t\t\t\t\tconst event = pending.event;\n\t\t\t\t\t\tif (event.tenantId !== tenantId || event.spaceId !== spaceId || event.subjectType !== entityType || event.subjectId !== entityId) continue;\n\t\t\t\t\t\tconst candidate = (event.payload as { toState?: unknown } | undefined)?.toState;\n\t\t\t\t\t\tif (typeof candidate === \"string\") state = candidate;\n\t\t\t\t\t}\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\tupdateActionInvocation: async (id, tenantId, spaceId, patch) => { pendingUpdates.push({ id, tenantId, spaceId, patch }); },\n\t\t\t\tupdateLeasedActionInvocation: async (input) => {\n\t\t\t\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\t\t\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\t\t\t\trecord.leaseToken !== input.leaseToken) return false;\n\t\t\t\t\tpendingUpdates.push({ id: input.id, tenantId: input.tenantId, spaceId: input.spaceId, patch: input.patch });\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t});\n\t\t\tfor (const update of pendingUpdates) {\n\t\t\t\tif (!await this.getActionInvocation(update.id, update.tenantId, update.spaceId)) throw new Error(`ActionInvocation not found: ${update.id}`);\n\t\t\t}\n\t\t\tfor (const pending of pendingEvents) {\n\t\t\t\tif (pending.metadata) await this.appendEventWithOutbox(pending.event, pending.metadata);\n\t\t\t\telse await this.appendEvent(pending.event);\n\t\t\t}\n\t\t\tfor (const update of pendingUpdates) await this.updateActionInvocation(update.id, update.tenantId, update.spaceId, update.patch);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (snapshotCreated) transactionProvider.restore(this.db, domainSnapshot!);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tif (input.idempotencyKey) {\n\t\t\tconst existing = this.invocations.find(\n\t\t\t\t(record) =>\n\t\t\t\t\trecord.tenantId === input.tenantId &&\n\t\t\t\t\trecord.spaceId === input.spaceId &&\n\t\t\t\t\trecord.actionId === input.actionId &&\n\t\t\t\t\trecord.idempotencyKey === input.idempotencyKey,\n\t\t\t);\n\t\t\tif (existing) return existing;\n\t\t}\n\t\tconst now = new Date();\n\t\tconst record = { ...input, attemptCount: 0, leaseToken: 0, createdAt: now, updatedAt: now };\n\t\tthis.invocations.push(record);\n\t\treturn record;\n\t}\n\n\tasync getActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined> {\n\t\treturn this.invocations.find(\n\t\t\t(record) => record.id === id && record.tenantId === tenantId && record.spaceId === spaceId,\n\t\t);\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: import(\"./types\").ActionInvocationPatch,\n\t): Promise<void> {\n\t\tconst record = await this.getActionInvocation(id, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${id}`);\n\t\tObject.assign(record, patch, { updatedAt: new Date() });\n\t\tif (Object.hasOwn(patch, \"pendingCompletion\") && patch.pendingCompletion === undefined) delete record.pendingCompletion;\n\t\tif (Object.hasOwn(patch, \"externalCompletion\") && patch.externalCompletion === undefined) delete record.externalCompletion;\n\t\tif (Object.hasOwn(patch, \"error\") && patch.error === undefined) delete record.error;\n\t\tif (patch.pendingCompletion && patch.status === \"running\") {\n\t\t\t// Parked: waiting on an external system is not holding a lease. A\n\t\t\t// handoff recorded mid-execution (no status) keeps the lease so the\n\t\t\t// executing worker can still finalize.\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t}\n\t\tif (\n\t\t\tpatch.status === \"waiting_for_approval\" ||\n\t\t\tpatch.status === \"completed\" ||\n\t\t\tpatch.status === \"failed\" ||\n\t\t\tpatch.status === \"blocked_by_policy\" ||\n\t\t\tpatch.status === \"reconciliation_required\" ||\n\t\t\tpatch.status === \"validation_failed\"\n\t\t) {\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t}\n\t}\n\n\tasync recordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst record = await this.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\trecord.hitlRoute = decision.route;\n\t\trecord.hitlRiskTier = decision.riskTier;\n\t\trecord.hitlReason = decision.reason;\n\t\tif (decision.policyVersion) record.hitlPolicyVersion = decision.policyVersion;\n\t\trecord.updatedAt = decision.evaluatedAt;\n\t\treturn record;\n\t}\n\n\tasync beginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult> {\n\t\tconst record = await this.getActionInvocation(\n\t\t\tinput.actionInvocationId,\n\t\t\tinput.tenantId,\n\t\t\tinput.spaceId,\n\t\t);\n\t\tif (!record || record.status !== \"waiting_for_approval\") {\n\t\t\treturn { applied: false, ...(record ? { invocation: record } : {}) };\n\t\t}\n\t\trecord.approvalDecision = input.decision;\n\t\trecord.updatedAt = input.now;\n\t\tif (!input.decision.approved) {\n\t\t\trecord.status = \"failed\";\n\t\t\trecord.error = `Approval rejected: ${input.decision.reason ?? \"no reason provided\"}`;\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t\treturn { applied: true, invocation: record };\n\t\t}\n\t\trecord.status = \"running\";\n\t\trecord.error = undefined;\n\t\trecord.leaseOwner = input.leaseOwner;\n\t\trecord.leaseExpiresAt = new Date(input.now.getTime() + input.leaseDurationMs);\n\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\trecord.attemptCount = Math.max(record.attemptCount, 1);\n\t\treturn { applied: true, invocation: record };\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tif (this.policyEvaluations.some((candidate) => candidate.id === record.id)) return;\n\t\tthis.policyEvaluations.push(record);\n\t}\n\n\tasync recordMutationGovernance(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcontext: Pick<ActionInvocationRecord, \"mutationFootprint\" | \"executionPrincipal\"> & {\n\t\t\tfootprint: NonNullable<ActionInvocationRecord[\"mutationFootprint\"]>;\n\t\t\texecutionPrincipal: NonNullable<ActionInvocationRecord[\"executionPrincipal\"]>;\n\t\t},\n\t): Promise<ActionInvocationRecord> {\n\t\tconst record = await this.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\trecord.mutationFootprint = context.footprint;\n\t\trecord.executionPrincipal = context.executionPrincipal;\n\t\trecord.updatedAt = new Date();\n\t\treturn record;\n\t}\n\n\tasync appendPolicyObligations(records: PolicyObligationRecord[]): Promise<void> {\n\t\tfor (const record of records) {\n\t\t\tif (!this.policyObligations.some((candidate) => candidate.actionInvocationId === record.actionInvocationId && candidate.id === record.id)) {\n\t\t\t\tthis.policyObligations.push(record);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync listPolicyObligations(actionInvocationId: string, tenantId: string, spaceId: string) {\n\t\treturn this.policyObligations.filter((record) => record.actionInvocationId === actionInvocationId && record.tenantId === tenantId && record.spaceId === spaceId);\n\t}\n\n\tasync updatePolicyObligation(actionInvocationId: string, obligationId: string, status: PolicyObligationRecord[\"status\"], evidenceReferences?: PolicyObligationRecord[\"evidenceReferences\"]): Promise<void> {\n\t\tconst record = this.policyObligations.find((candidate) => candidate.actionInvocationId === actionInvocationId && candidate.id === obligationId);\n\t\tif (!record) throw new Error(`Policy obligation not found: ${obligationId}`);\n\t\trecord.status = status;\n\t\tif (evidenceReferences) record.evidenceReferences = evidenceReferences;\n\t\trecord.updatedAt = new Date();\n\t}\n\n\tasync appendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void> {\n\t\tif (!this.executionAttestations.some((candidate) => candidate.id === record.id)) this.executionAttestations.push(record);\n\t}\n\n\tasync listExecutionAttestations(actionInvocationId: string, tenantId: string, spaceId: string) {\n\t\treturn this.executionAttestations.filter((record) => record.actionInvocationId === actionInvocationId && record.tenantId === tenantId && record.spaceId === spaceId);\n\t}\n\n\tasync appendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void> {\n\t\tif (!this.externalReconciliations.some((candidate) => candidate.id === record.id)) this.externalReconciliations.push(record);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tif (this.adapterInvocations.some((candidate) => candidate.id === record.id)) return;\n\t\tthis.adapterInvocations.push(record);\n\t}\n\n\tasync getAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined> {\n\t\treturn this.adapterInvocations.find((candidate) => candidate.id === id);\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tconst record = this.adapterInvocations.find((candidate) => candidate.id === id);\n\t\tif (!record) throw new Error(`AdapterInvocation not found: ${id}`);\n\t\tObject.assign(record, patch);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tif (this.events.some((candidate) => candidate.id === event.id)) return;\n\t\tthis.events.push(event);\n\t}\n\n\tasync appendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void> {\n\t\tif (this.events.some((candidate) => candidate.id === event.id)) return;\n\t\tconst createdAt = new Date(event.recordedAt);\n\t\tthis.events.push(event);\n\t\tthis.outbox.push({\n\t\t\tid: event.id,\n\t\t\ttenantId: event.tenantId,\n\t\t\tspaceId: event.spaceId,\n\t\t\tevent: toEnterpriseEventEnvelope(event, metadata),\n\t\t\tstatus: \"pending\",\n\t\t\tattemptCount: 0,\n\t\t\tavailableAt: createdAt,\n\t\t\tcreatedAt,\n\t\t});\n\t}\n\n\tasync claimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\treturn this.outbox\n\t\t\t.filter((record) => record.status === \"pending\" && record.availableAt <= current && (!record.leaseExpiresAt || record.leaseExpiresAt <= current) && (!input.tenantId || record.tenantId === input.tenantId) && (!input.spaceId || record.spaceId === input.spaceId))\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime() || left.id.localeCompare(right.id))\n\t\t\t.slice(0, Math.max(1, Math.min(input.limit ?? 100, 1_000)))\n\t\t\t.map((record) => {\n\t\t\t\trecord.leaseOwner = input.workerId;\n\t\t\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\t\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\t\t\trecord.attemptCount += 1;\n\t\t\t\treturn cloneOutboxRecord(record);\n\t\t\t});\n\t}\n\n\tasync markOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(id, workerId, leaseToken);\n\t\trecord.status = \"published\";\n\t\trecord.publishedAt = publishedAt;\n\t\tdelete record.leaseOwner;\n\t\tdelete record.leaseExpiresAt;\n\t}\n\n\tasync markOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(input.id, input.workerId, input.leaseToken);\n\t\trecord.status = input.deadLetter ? \"dead_letter\" : \"pending\";\n\t\trecord.lastError = input.error;\n\t\trecord.availableAt = input.availableAt;\n\t\tdelete record.leaseOwner;\n\t\tdelete record.leaseExpiresAt;\n\t}\n\n\tasync renewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean> {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === input.id);\n\t\tconst current = input.now ?? new Date();\n\t\tif (!record || record.status !== \"pending\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken || !record.leaseExpiresAt ||\n\t\t\trecord.leaseExpiresAt <= current) return false;\n\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\treturn true;\n\t}\n\n\tasync listOutbox(input: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] } = {}): Promise<OutboxRecord[]> {\n\t\treturn this.outbox.filter((record) => (!input.tenantId || record.tenantId === input.tenantId) && (!input.spaceId || record.spaceId === input.spaceId) && (!input.statuses?.length || input.statuses.includes(record.status))).map(cloneOutboxRecord);\n\t}\n\n\tprivate requireLeasedOutbox(id: string, workerId: string, leaseToken?: number): OutboxRecord {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === id);\n\t\tif (!record || record.leaseOwner !== workerId ||\n\t\t\t(record.leaseToken ?? 0) !== (leaseToken ?? 0)) {\n\t\t\tthrow new Error(`Outbox record ${id} is not leased by ${workerId}.`);\n\t\t}\n\t\treturn record;\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\treturn (\n\t\t\tthis.events.filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)\n\t\t\t\t.length + 1\n\t\t);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined> {\n\t\tlet state: string | undefined;\n\t\tfor (const event of this.events) {\n\t\t\tif (\n\t\t\t\tevent.tenantId !== tenantId ||\n\t\t\t\tevent.spaceId !== spaceId ||\n\t\t\t\tevent.subjectType !== entityType ||\n\t\t\t\tevent.subjectId !== entityId\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst candidate = (event.payload as { toState?: unknown } | undefined)?.toState;\n\t\t\tif (typeof candidate === \"string\") state = candidate;\n\t\t}\n\t\treturn state;\n\t}\n\n\tasync listActionInvocations(\n\t\tinput: ListActionInvocationsInput = {},\n\t): Promise<ActionInvocationRecord[]> {\n\t\treturn this.invocations\n\t\t\t.filter(\n\t\t\t\t(record) =>\n\t\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId) &&\n\t\t\t\t\t(!input.statuses?.length || input.statuses.includes(record.status)) &&\n\t\t\t\t\t(!input.updatedBefore || record.updatedAt < input.updatedBefore) &&\n\t\t\t\t\t(!(input.awaitingCompletion || input.completionDueBefore) || record.pendingCompletion !== undefined) &&\n\t\t\t\t\t(!input.completionDueBefore || (record.pendingCompletion?.dueAt !== undefined && record.pendingCompletion.dueAt <= input.completionDueBefore)) &&\n\t\t\t\t\t(!input.unleased || record.leaseOwner === undefined),\n\t\t\t)\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime())\n\t\t\t.slice(0, input.limit ?? 100);\n\t}\n\n\tasync getHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts> {\n\t\tconst invocations = this.invocations.filter(\n\t\t\t(record) =>\n\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId),\n\t\t);\n\t\tconst outbox = this.outbox.filter(\n\t\t\t(record) =>\n\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId),\n\t\t);\n\t\treturn {\n\t\t\tinvocationBacklog: invocations.filter((item) => item.status === \"pending\").length,\n\t\t\tinvocationRunning: invocations.filter((item) => item.status === \"running\").length,\n\t\t\tinvocationExpiredLeases: invocations.filter((item) =>\n\t\t\t\titem.status === \"running\" &&\n\t\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\t\titem.leaseExpiresAt.getTime() <= input.now.getTime(),\n\t\t\t).length,\n\t\t\tinvocationApprovalWaits: invocations.filter((item) => item.status === \"waiting_for_approval\").length,\n\t\t\tinvocationReconciliationRequired: invocations.filter((item) => item.status === \"reconciliation_required\").length,\n\t\t\toutboxBacklog: outbox.filter((item) => item.status === \"pending\").length,\n\t\t\toutboxExpiredLeases: outbox.filter((item) =>\n\t\t\t\titem.status === \"pending\" &&\n\t\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\t\titem.leaseExpiresAt.getTime() <= input.now.getTime(),\n\t\t\t).length,\n\t\t\toutboxDeadLetters: outbox.filter((item) => item.status === \"dead_letter\").length,\n\t\t};\n\t}\n\n\tasync claimActionInvocations(\n\t\tinput: ClaimActionInvocationsInput,\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst eligible = this.invocations\n\t\t\t.filter(\n\t\t\t\t(record) =>\n\t\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId) &&\n\t\t\t\t\t(record.status === \"pending\" ||\n\t\t\t\t\t\t(record.status === \"running\" &&\n\t\t\t\t\t\t\trecord.leaseExpiresAt !== undefined &&\n\t\t\t\t\t\t\trecord.leaseExpiresAt <= current)),\n\t\t\t)\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime())\n\t\t\t.slice(0, input.limit ?? 10);\n\t\tfor (const record of eligible) {\n\t\t\trecord.status = \"running\";\n\t\t\trecord.leaseOwner = input.workerId;\n\t\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\t\trecord.attemptCount += 1;\n\t\t\trecord.updatedAt = current;\n\t\t}\n\t\treturn eligible.map((record) => structuredClone(record));\n\t}\n\n\tasync updateLeasedActionInvocation(input: import(\"./types\").UpdateLeasedActionInvocationInput): Promise<boolean> {\n\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken) return false;\n\t\tawait this.updateActionInvocation(input.id, input.tenantId, input.spaceId, input.patch);\n\t\treturn true;\n\t}\n\n\tasync renewActionInvocationLease(input: import(\"./types\").RenewActionInvocationLeaseInput): Promise<boolean> {\n\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\tconst current = input.now ?? new Date();\n\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken || !record.leaseExpiresAt ||\n\t\t\trecord.leaseExpiresAt <= current) return false;\n\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\trecord.updatedAt = current;\n\t\treturn true;\n\t}\n\n\tasync listEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]> {\n\t\treturn this.events\n\t\t\t.filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)\n\t\t\t.sort((left, right) => left.sequence - right.sequence);\n\t}\n}\n","import { createHash } from \"node:crypto\";\nimport type { PlatformHostSqlClient } from \"./postgres-store\";\n\nexport interface PostgresMigration {\n\tversion: number;\n\tname: string;\n\tsql: string;\n}\n\n/**\n * Applies an immutable, ordered migration set in one PostgreSQL transaction.\n *\n * The transaction-scoped advisory lock serializes migrators. A previously\n * applied version may be presented again only when its checksum is unchanged.\n */\nexport async function applyPostgresMigrations(\n\tclient: PlatformHostSqlClient,\n\tmigrations: readonly PostgresMigration[],\n): Promise<void> {\n\tconst ordered = validateMigrations(migrations);\n\tconst statements = ordered.map((migration) => migrationStatement(migration));\n\n\tawait client.query(`\n\t\tBEGIN;\n\t\tSELECT pg_advisory_xact_lock(hashtext('fabric_platform.schema_migrations'));\n\t\tCREATE SCHEMA IF NOT EXISTS fabric_platform;\n\t\tCREATE TABLE IF NOT EXISTS fabric_platform.schema_migrations (\n\t\t\tversion integer PRIMARY KEY,\n\t\t\tname text NOT NULL,\n\t\t\tchecksum text NOT NULL,\n\t\t\tapplied_at timestamptz NOT NULL DEFAULT now()\n\t\t);\n\t\t${statements.join(\"\\n\")}\n\t\tCOMMIT;\n\t`);\n}\n\nfunction validateMigrations(\n\tmigrations: readonly PostgresMigration[],\n): PostgresMigration[] {\n\tconst ordered = [...migrations].sort((left, right) => left.version - right.version);\n\tconst versions = new Set<number>();\n\n\tfor (const migration of ordered) {\n\t\tif (!Number.isSafeInteger(migration.version) || migration.version < 1) {\n\t\t\tthrow new Error(`Migration version must be a positive safe integer: ${migration.version}`);\n\t\t}\n\t\tif (versions.has(migration.version)) {\n\t\t\tthrow new Error(`Duplicate migration version: ${migration.version}`);\n\t\t}\n\t\tif (!/^[a-z][a-z0-9_]*$/.test(migration.name)) {\n\t\t\tthrow new Error(`Invalid migration name: ${migration.name}`);\n\t\t}\n\t\tif (migration.sql.trim().length === 0) {\n\t\t\tthrow new Error(`Migration ${migration.version} has no SQL`);\n\t\t}\n\t\tversions.add(migration.version);\n\t}\n\n\treturn ordered;\n}\n\nfunction migrationStatement(migration: PostgresMigration): string {\n\tconst checksum = createHash(\"sha256\").update(migration.sql).digest(\"hex\");\n\tconst delimiter = `$fabric_platform_migration_${migration.version}$`;\n\tif (migration.sql.includes(delimiter)) {\n\t\tthrow new Error(`Migration ${migration.version} contains its reserved SQL delimiter`);\n\t}\n\n\treturn `\n\t\tDO ${delimiter}\n\t\tDECLARE\n\t\t\trecorded_checksum text;\n\t\tBEGIN\n\t\t\tSELECT checksum INTO recorded_checksum\n\t\t\tFROM fabric_platform.schema_migrations\n\t\t\tWHERE version = ${migration.version};\n\n\t\t\tIF FOUND THEN\n\t\t\t\tIF recorded_checksum <> ${sqlLiteral(checksum)} THEN\n\t\t\t\t\tRAISE EXCEPTION 'Migration checksum mismatch for version ${migration.version}';\n\t\t\t\tEND IF;\n\t\t\tELSE\n\t\t\t\t${migration.sql}\n\t\t\t\tINSERT INTO fabric_platform.schema_migrations (version, name, checksum)\n\t\t\t\tVALUES (${migration.version}, ${sqlLiteral(migration.name)}, ${sqlLiteral(checksum)});\n\t\t\tEND IF;\n\t\tEND\n\t\t${delimiter};`;\n}\n\nfunction sqlLiteral(value: string): string {\n\treturn `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationPatch,\n\tApprovalDecisionTransitionResult,\n\tApprovalPlatformHostStore,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tAtomicMutationPlatformHostStore,\n\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tGovernancePlatformHostStore,\n\tPolicyObligationRecord,\n\tExecutionAttestationRecord,\n\tExternalReconciliationRecord,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tPlatformHostMutationTransaction,\n\tRecoverablePlatformHostStore,\n\tOutboxPlatformHostStore,\n\tOutboxEventMetadata,\n\tOutboxRecord,\n\tClaimOutboxInput,\n\tOutboxStatus,\n\tEnterpriseEventEnvelope,\n} from \"./types\";\nimport { toEnterpriseEventEnvelope } from \"./outbox\";\nimport { applyPostgresMigrations } from \"./postgres-migrations\";\nimport type { PlatformHostHealthCounts, PlatformHostHealthQuery } from \"./observability\";\n\nexport interface PlatformHostSqlResult<Row = Record<string, unknown>> {\n\trows: Row[];\n}\n\n/** Structural subset implemented by `pg.Pool` and Lakebase-compatible clients. */\nexport interface PlatformHostSqlClient {\n\tquery<Row = Record<string, unknown>>(\n\t\tsql: string,\n\t\tvalues?: unknown[],\n\t): Promise<PlatformHostSqlResult<Row>>;\n}\n\nexport interface PostgresPlatformHostTransactionContext<TDb> {\n\tdb: TDb;\n\tsql: PlatformHostSqlClient;\n}\n\n/**\n * Application-owned transaction binder.\n *\n * Platform Host cannot infer how an application's `TDb` is rebound to a\n * `pg.PoolClient`. Production applications provide this adapter so domain\n * methods and Host ledger writes share one PostgreSQL transaction.\n */\nexport interface PostgresPlatformHostTransactionProvider<TDb> {\n\trun<TResult>(\n\t\trun: (context: PostgresPlatformHostTransactionContext<TDb>) => Promise<TResult>,\n\t): Promise<TResult>;\n}\n\n/** Durable mutation-pipeline ledger for Databricks Lakebase or standard Postgres. */\nexport class PostgresPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb>, OutboxPlatformHostStore<TDb> {\n\treadonly transactionWithEvents?: AtomicMutationPlatformHostStore<TDb>[\"transactionWithEvents\"];\n\treadonly transactionalOutbox: boolean;\n\n\tconstructor(\n\t\treadonly db: TDb,\n\t\tprivate readonly sql: PlatformHostSqlClient,\n\t\ttransactionProvider?: PostgresPlatformHostTransactionProvider<TDb>,\n\t) {\n\t\tthis.transactionalOutbox = transactionProvider !== undefined;\n\t\tif (transactionProvider) {\n\t\t\tthis.transactionWithEvents = async <TResult>(\n\t\t\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t\t\t): Promise<TResult> =>\n\t\t\t\ttransactionProvider.run(async ({ db, sql }) => {\n\t\t\t\t\tconst scoped = new PostgresPlatformHostStore(db, sql);\n\t\t\t\t\treturn run({\n\t\t\t\t\t\tdb,\n\t\t\t\t\t\tgetActionInvocationForUpdate: async (id, tenantId, spaceId) => {\n\t\t\t\t\t\t\tconst result = await sql.query<Record<string, unknown>>(\n\t\t\t\t\t\t\t\t`SELECT * FROM fabric_platform.action_invocations\n\t\t\t\t\t\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t\t\t\t\t\t FOR UPDATE`,\n\t\t\t\t\t\t\t\t[id, tenantId, spaceId],\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn result.rows[0] ? toActionRecord(result.rows[0]) : undefined;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetEvent: (id, tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.getEvent(id, tenantId, spaceId),\n\t\t\t\t\t\tappendEvent: (event) => scoped.appendEvent(event),\n\t\t\t\t\t\tappendEventWithOutbox: (event, metadata) => scoped.appendEventWithOutbox(event, metadata),\n\t\t\t\t\t\tnextEventSequence: (tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.nextEventSequence(tenantId, spaceId),\n\t\t\t\t\t\tlistEvents: (tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.listEvents(tenantId, spaceId),\n\t\t\t\t\t\tgetEntityState: (tenantId, spaceId, entityType, entityId) =>\n\t\t\t\t\t\t\tscoped.getEntityState(tenantId, spaceId, entityType, entityId),\n\t\t\t\t\t\tupdateActionInvocation: (id, tenantId, spaceId, patch) =>\n\t\t\t\t\t\t\tscoped.updateActionInvocation(id, tenantId, spaceId, patch),\n\t\t\t\t\t\tupdateLeasedActionInvocation: (input) =>\n\t\t\t\t\t\t\tscoped.updateLeasedActionInvocation(input),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t}\n\n\tasync ensureSchema(): Promise<void> {\n\t\tawait applyPostgresMigrations(this.sql, [{\n\t\t\tversion: 1,\n\t\t\tname: \"host_ledger_baseline\",\n\t\t\tsql: `\n\t\t\tCREATE SCHEMA IF NOT EXISTS fabric_platform;\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.action_invocations (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\taction_id text NOT NULL, action_version integer NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, status text NOT NULL,\n\t\t\t\tparameters jsonb NOT NULL, result jsonb NOT NULL DEFAULT '{}'::jsonb,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text, idempotency_key text,\n\t\t\t\tparameter_digest text, parameter_digest_algorithm text, idempotency_actor_id text,\n\t\t\t\tidempotency_authorization_binding_id text, invocation_provenance jsonb,\n\t\t\t\tauthorization_binding jsonb, execution_reason text, authorization_reconciliation jsonb,\n\t\t\t\tadapter_reconciliation jsonb, authorization_binding_id text, error text,\n\t\t\t\tattempt_count integer NOT NULL DEFAULT 0, lease_owner text,\n\t\t\t\tlease_expires_at timestamptz, hitl_route text, hitl_risk_tier text,\n\t\t\t\thitl_reason text, hitl_policy_version text, approval_decision jsonb,\n\t\t\t\tmutation_footprint jsonb, execution_principal jsonb, runtime_evidence jsonb,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_key text,\n\t\t\t\tADD COLUMN IF NOT EXISTS parameter_digest text,\n\t\t\t\tADD COLUMN IF NOT EXISTS parameter_digest_algorithm text,\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_actor_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_authorization_binding_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS invocation_provenance jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_binding jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS execution_reason text,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_reconciliation jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS adapter_reconciliation jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_binding_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS attempt_count integer NOT NULL DEFAULT 0,\n\t\t\t\tADD COLUMN IF NOT EXISTS lease_owner text,\n\t\t\t\tADD COLUMN IF NOT EXISTS lease_expires_at timestamptz,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_route text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_risk_tier text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_reason text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_policy_version text,\n\t\t\t\tADD COLUMN IF NOT EXISTS approval_decision jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS mutation_footprint jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS execution_principal jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS runtime_evidence jsonb;\n\t\t\tCREATE UNIQUE INDEX IF NOT EXISTS action_invocations_idempotency_idx\n\t\t\t\tON fabric_platform.action_invocations\n\t\t\t\t(tenant_id, space_id, action_id, idempotency_key)\n\t\t\t\tWHERE idempotency_key IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_parameter_digest_idx\n\t\t\t\tON fabric_platform.action_invocations (tenant_id, parameter_digest)\n\t\t\t\tWHERE parameter_digest IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_authority_binding_idx\n\t\t\t\tON fabric_platform.action_invocations (tenant_id, authorization_binding_id)\n\t\t\t\tWHERE authorization_binding_id IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_worker_idx\n\t\t\t\tON fabric_platform.action_invocations (status, lease_expires_at, created_at);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.policy_evaluations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, outcome jsonb NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.adapter_invocations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, adapter_type text NOT NULL,\n\t\t\t\toperation text NOT NULL, vendor text NOT NULL, status text NOT NULL,\n\t\t\t\tinput jsonb NOT NULL, output jsonb, error text, attempt integer NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.policy_obligations (\n\t\t\t\taction_invocation_id text NOT NULL, id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, type text NOT NULL,\n\t\t\t\tstatus text NOT NULL, required boolean NOT NULL DEFAULT true,\n\t\t\t\tdescription text, evidence_references jsonb, metadata jsonb,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL,\n\t\t\t\tPRIMARY KEY (action_invocation_id,id)\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.execution_attestations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, adapter_invocation_id text,\n\t\t\t\tattestation jsonb NOT NULL, recorded_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.external_reconciliations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\treconciliation jsonb NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.event_sequences (\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, next_sequence bigint NOT NULL,\n\t\t\t\tPRIMARY KEY (tenant_id, space_id)\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.asset_events (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\tevent_type text NOT NULL, event_schema_version integer NOT NULL,\n\t\t\t\tsubject_type text NOT NULL, subject_id text NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, action_invocation_id text,\n\t\t\t\tpayload jsonb NOT NULL, sequence bigint NOT NULL,\n\t\t\t\toccurred_at timestamptz NOT NULL, recorded_at timestamptz NOT NULL,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text, provenance jsonb, consistency text,\n\t\t\t\tUNIQUE (tenant_id, space_id, sequence)\n\t\t\t);\n\t\t\tALTER TABLE fabric_platform.asset_events ADD COLUMN IF NOT EXISTS provenance jsonb;\n\t\t\tALTER TABLE fabric_platform.asset_events ADD COLUMN IF NOT EXISTS consistency text;\n\t\t\tCREATE INDEX IF NOT EXISTS asset_events_subject_idx\n\t\t\t\tON fabric_platform.asset_events\n\t\t\t\t(tenant_id, space_id, subject_type, subject_id, sequence);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.event_outbox (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\tevent jsonb NOT NULL, status text NOT NULL DEFAULT 'pending',\n\t\t\t\tattempt_count integer NOT NULL DEFAULT 0, available_at timestamptz NOT NULL,\n\t\t\t\tlease_owner text, lease_expires_at timestamptz, last_error text,\n\t\t\t\tcreated_at timestamptz NOT NULL, published_at timestamptz\n\t\t\t);\n\t\t\tCREATE INDEX IF NOT EXISTS event_outbox_claim_idx\n\t\t\t\tON fabric_platform.event_outbox (status, available_at, lease_expires_at, created_at);\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 2,\n\t\t\tname: \"lease_fencing\",\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\t\tADD COLUMN lease_token bigint NOT NULL DEFAULT 0;\n\t\t\t\tALTER TABLE fabric_platform.event_outbox\n\t\t\t\t\tADD COLUMN lease_token bigint NOT NULL DEFAULT 0;\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 3,\n\t\t\tname: \"external_completion\",\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\t\tADD COLUMN pending_completion jsonb,\n\t\t\t\t\tADD COLUMN external_completion jsonb,\n\t\t\t\t\tADD COLUMN completion_due_at timestamptz;\n\t\t\t\tCREATE INDEX action_invocations_completion_due_idx\n\t\t\t\t\tON fabric_platform.action_invocations (completion_due_at)\n\t\t\t\t\tWHERE completion_due_at IS NOT NULL;\n\t\t\t`,\n\t\t}]);\n\t}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst now = new Date();\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`INSERT INTO fabric_platform.action_invocations\n\t\t\t (id,tenant_id,space_id,action_id,action_version,actor_id,actor_type,status,\n\t\t\t\t parameters,result,correlation_id,causation_id,idempotency_key,\n\t\t\t\t parameter_digest,parameter_digest_algorithm,idempotency_actor_id,\n\t\t\t\t idempotency_authorization_binding_id,invocation_provenance,authorization_binding,execution_reason,\n\t\t\t\t authorization_binding_id,error,runtime_evidence,created_at,updated_at)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14,$15,$16,$17,$18::jsonb,$19::jsonb,$20,$21,$22,$23::jsonb,$24,$24)\n\t\t\t ON CONFLICT (tenant_id,space_id,action_id,idempotency_key)\n\t\t\t WHERE idempotency_key IS NOT NULL DO UPDATE SET id=fabric_platform.action_invocations.id\n\t\t\t RETURNING *`,\n\t\t\t[\n\t\t\t\tinput.id, input.tenantId, input.spaceId, input.actionId, input.actionVersion,\n\t\t\t\tinput.actorId, input.actorType, input.status, JSON.stringify(input.parameters),\n\t\t\t\tJSON.stringify(input.result), input.correlationId, input.causationId ?? null,\n\t\t\t\tinput.idempotencyKey ?? null, input.parameterDigest ?? null,\n\t\t\t\tinput.parameterDigestAlgorithm ?? null, input.idempotencyActorId ?? null,\n\t\t\t\tinput.idempotencyAuthorizationBindingId ?? null,\n\t\t\t\tinput.provenance ? JSON.stringify(input.provenance) : null,\n\t\t\t\tinput.authorizationBinding ? JSON.stringify(input.authorizationBinding) : null,\n\t\t\t\tinput.executionReason ?? null, input.authorizationBindingId ?? null,\n\t\t\t\tinput.error ?? null, input.runtimeEvidence ? JSON.stringify(input.runtimeEvidence) : null, now,\n\t\t\t],\n\t\t);\n\t\treturn toActionRecord(result.rows[0]!);\n\t}\n\n\tasync getActionInvocation(id: string, tenantId: string, spaceId: string) {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.action_invocations\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toActionRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t status=COALESCE($4,status), result=COALESCE($5::jsonb,result),\n\t\t\t error=CASE WHEN $6::boolean THEN $7 ELSE error END,\n\t\t\t authorization_reconciliation=CASE WHEN $8::boolean THEN $9::jsonb ELSE authorization_reconciliation END,\n\t\t\t adapter_reconciliation=CASE WHEN $10::boolean THEN $11::jsonb ELSE adapter_reconciliation END,\n\t\t\t pending_completion=CASE WHEN $12::boolean THEN $13::jsonb ELSE pending_completion END,\n\t\t\t completion_due_at=CASE WHEN $12::boolean THEN ($13::jsonb->>'dueAt')::timestamptz ELSE completion_due_at END,\n\t\t\t external_completion=CASE WHEN $14::boolean THEN $15::jsonb ELSE external_completion END,\n\t\t\t lease_owner=CASE WHEN ($13::jsonb IS NOT NULL AND $4='running') OR $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_owner END,\n\t\t\t lease_expires_at=CASE WHEN ($13::jsonb IS NOT NULL AND $4='running') OR $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_expires_at END,\n\t\t\t updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId, patch.status ?? null,\n\t\t\t patch.result === undefined ? null : JSON.stringify(patch.result),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null,\n\t\t\t Object.hasOwn(patch, \"authorizationReconciliation\"),\n\t\t\t patch.authorizationReconciliation ? JSON.stringify(patch.authorizationReconciliation) : null,\n\t\t\t Object.hasOwn(patch, \"adapterReconciliation\"),\n\t\t\t patch.adapterReconciliation ? JSON.stringify(patch.adapterReconciliation) : null,\n\t\t\t Object.hasOwn(patch, \"pendingCompletion\"),\n\t\t\t patch.pendingCompletion ? JSON.stringify(patch.pendingCompletion) : null,\n\t\t\t Object.hasOwn(patch, \"externalCompletion\"),\n\t\t\t patch.externalCompletion ? JSON.stringify(patch.externalCompletion) : null],\n\t\t);\n\t}\n\n\tasync recordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t hitl_route=$4, hitl_risk_tier=$5, hitl_reason=$6,\n\t\t\t hitl_policy_version=$7, updated_at=$8\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t RETURNING *`,\n\t\t\t[\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\tdecision.route,\n\t\t\t\tdecision.riskTier,\n\t\t\t\tdecision.reason,\n\t\t\t\tdecision.policyVersion ?? null,\n\t\t\t\tdecision.evaluatedAt,\n\t\t\t],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\treturn toActionRecord(row);\n\t}\n\n\tasync beginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t approval_decision=$4::jsonb,\n\t\t\t status=CASE WHEN $5::boolean THEN 'running' ELSE 'failed' END,\n\t\t\t error=CASE WHEN $5::boolean THEN NULL ELSE $6 END,\n\t\t\t lease_owner=CASE WHEN $5::boolean THEN $7 ELSE NULL END,\n\t\t\t lease_expires_at=CASE WHEN $5::boolean THEN $8::timestamptz ELSE NULL END,\n\t\t\t lease_token=CASE WHEN $5::boolean THEN lease_token+1 ELSE lease_token END,\n\t\t\t attempt_count=CASE WHEN $5::boolean THEN GREATEST(attempt_count,1) ELSE attempt_count END,\n\t\t\t updated_at=$9\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3 AND status='waiting_for_approval'\n\t\t\t RETURNING *`,\n\t\t\t[\n\t\t\t\tinput.actionInvocationId,\n\t\t\t\tinput.tenantId,\n\t\t\t\tinput.spaceId,\n\t\t\t\tJSON.stringify({ ...input.decision, decidedAt: input.decision.decidedAt.toISOString() }),\n\t\t\t\tinput.decision.approved,\n\t\t\t\t`Approval rejected: ${input.decision.reason ?? \"no reason provided\"}`,\n\t\t\t\tinput.leaseOwner,\n\t\t\t\tnew Date(input.now.getTime() + input.leaseDurationMs),\n\t\t\t\tinput.now,\n\t\t\t],\n\t\t);\n\t\treturn result.rows[0]\n\t\t\t? { applied: true, invocation: toActionRecord(result.rows[0]) }\n\t\t\t: { applied: false };\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.policy_evaluations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,outcome,created_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5::jsonb,$6) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t JSON.stringify(record.outcome), record.createdAt],\n\t\t);\n\t}\n\n\tasync recordMutationGovernance(actionInvocationId: string, tenantId: string, spaceId: string, context: { footprint: NonNullable<ActionInvocationRecord[\"mutationFootprint\"]>; executionPrincipal: NonNullable<ActionInvocationRecord[\"executionPrincipal\"]> }): Promise<ActionInvocationRecord> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET mutation_footprint=$4::jsonb,\n\t\t\t execution_principal=$5::jsonb, updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3 RETURNING *`,\n\t\t\t[actionInvocationId, tenantId, spaceId, JSON.stringify(context.footprint), JSON.stringify(context.executionPrincipal)],\n\t\t);\n\t\tif (!result.rows[0]) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\treturn toActionRecord(result.rows[0]);\n\t}\n\n\tasync appendPolicyObligations(records: PolicyObligationRecord[]): Promise<void> {\n\t\tfor (const record of records) {\n\t\t\tawait this.sql.query(\n\t\t\t\t`INSERT INTO fabric_platform.policy_obligations\n\t\t\t\t (action_invocation_id,id,tenant_id,space_id,type,status,required,description,evidence_references,metadata,created_at,updated_at)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12)\n\t\t\t\t ON CONFLICT (action_invocation_id,id) DO NOTHING`,\n\t\t\t\t[record.actionInvocationId, record.id, record.tenantId, record.spaceId, record.type, record.status,\n\t\t\t\t record.required ?? true, record.description ?? null,\n\t\t\t\t record.evidenceReferences ? JSON.stringify(record.evidenceReferences) : null,\n\t\t\t\t record.metadata ? JSON.stringify(record.metadata) : null, record.createdAt, record.updatedAt],\n\t\t\t);\n\t\t}\n\t}\n\n\tasync listPolicyObligations(actionInvocationId: string, tenantId: string, spaceId: string): Promise<PolicyObligationRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.policy_obligations WHERE action_invocation_id=$1 AND tenant_id=$2 AND space_id=$3 ORDER BY created_at,id`,\n\t\t\t[actionInvocationId, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toObligationRecord);\n\t}\n\n\tasync updatePolicyObligation(actionInvocationId: string, obligationId: string, status: PolicyObligationRecord[\"status\"], evidenceReferences?: PolicyObligationRecord[\"evidenceReferences\"]): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.policy_obligations SET status=$3,\n\t\t\t evidence_references=COALESCE($4::jsonb,evidence_references), updated_at=now()\n\t\t\t WHERE action_invocation_id=$1 AND id=$2`,\n\t\t\t[actionInvocationId, obligationId, status, evidenceReferences ? JSON.stringify(evidenceReferences) : null],\n\t\t);\n\t}\n\n\tasync appendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void> {\n\t\tconst { id, actionInvocationId, tenantId, spaceId, adapterInvocationId, recordedAt, ...attestation } = record;\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.execution_attestations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,adapter_invocation_id,attestation,recorded_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6::jsonb,$7) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[id, actionInvocationId, tenantId, spaceId, adapterInvocationId ?? null, JSON.stringify(attestation), recordedAt],\n\t\t);\n\t}\n\n\tasync listExecutionAttestations(actionInvocationId: string, tenantId: string, spaceId: string): Promise<ExecutionAttestationRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.execution_attestations WHERE action_invocation_id=$1 AND tenant_id=$2 AND space_id=$3 ORDER BY recorded_at,id`,\n\t\t\t[actionInvocationId, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toAttestationRecord);\n\t}\n\n\tasync appendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void> {\n\t\tconst { id, actionInvocationId, tenantId, spaceId, ...reconciliation } = record;\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.external_reconciliations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,reconciliation)\n\t\t\t VALUES ($1,$2,$3,$4,$5::jsonb) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[id, actionInvocationId, tenantId, spaceId, JSON.stringify(reconciliation)],\n\t\t);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.adapter_invocations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,adapter_type,operation,vendor,status,\n\t\t\t input,output,error,attempt,created_at,updated_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14)\n\t\t\t ON CONFLICT (id) DO NOTHING`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t record.adapterType, record.operation, record.vendor, record.status,\n\t\t\t JSON.stringify(record.input), record.output ? JSON.stringify(record.output) : null,\n\t\t\t record.error ?? null, record.attempt, record.createdAt, record.updatedAt],\n\t\t);\n\t}\n\n\tasync getAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.adapter_invocations WHERE id=$1`,\n\t\t\t[id],\n\t\t);\n\t\treturn result.rows[0] ? toAdapterRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.adapter_invocations SET\n\t\t\t status=COALESCE($2,status), output=COALESCE($3::jsonb,output),\n\t\t\t error=CASE WHEN $4::boolean THEN $5 ELSE error END,\n\t\t\t attempt=COALESCE($6,attempt), updated_at=COALESCE($7,now()) WHERE id=$1`,\n\t\t\t[id, patch.status ?? null,\n\t\t\t patch.output === undefined ? null : JSON.stringify(patch.output),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null, patch.attempt ?? null,\n\t\t\t patch.updatedAt ?? null],\n\t\t);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.asset_events\n\t\t\t (id,tenant_id,space_id,event_type,event_schema_version,subject_type,subject_id,\n\t\t\t actor_id,actor_type,action_invocation_id,payload,sequence,occurred_at,recorded_at,\n\t\t\t correlation_id,causation_id,provenance,consistency)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16,$17::jsonb,$18)\n\t\t\t\t ON CONFLICT (id) DO NOTHING`,\n\t\t\t[event.id, event.tenantId, event.spaceId, event.eventType, event.eventSchemaVersion,\n\t\t\t event.subjectType, event.subjectId, event.actorId, event.actorType,\n\t\t\t event.actionInvocationId ?? null, JSON.stringify(event.payload), event.sequence,\n\t\t\t event.occurredAt, event.recordedAt, event.correlationId, event.causationId ?? null,\n\t\t\t event.provenance ? JSON.stringify(event.provenance) : null, event.consistency ?? null],\n\t\t);\n\t}\n\n\tasync appendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void> {\n\t\tconst envelope = toEnterpriseEventEnvelope(event, metadata);\n\t\tawait this.sql.query(\n\t\t\t`WITH inserted_event AS (\n\t\t\t\tINSERT INTO fabric_platform.asset_events\n\t\t\t\t (id,tenant_id,space_id,event_type,event_schema_version,subject_type,subject_id,\n\t\t\t\t actor_id,actor_type,action_invocation_id,payload,sequence,occurred_at,recorded_at,\n\t\t\t\t correlation_id,causation_id,provenance,consistency)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16,$17::jsonb,$19)\n\t\t\t\t ON CONFLICT (id) DO NOTHING RETURNING id\n\t\t\t)\n\t\t\tINSERT INTO fabric_platform.event_outbox\n\t\t\t (id,tenant_id,space_id,event,status,attempt_count,available_at,created_at)\n\t\t\tSELECT $1,$2,$3,$18::jsonb,'pending',0,$14,$14 FROM inserted_event\n\t\t\tON CONFLICT (id) DO NOTHING`,\n\t\t\t[event.id, event.tenantId, event.spaceId, event.eventType, event.eventSchemaVersion,\n\t\t\t event.subjectType, event.subjectId, event.actorId, event.actorType,\n\t\t\t event.actionInvocationId ?? null, JSON.stringify(event.payload), event.sequence,\n\t\t\t event.occurredAt, event.recordedAt, event.correlationId, event.causationId ?? null,\n\t\t\t event.provenance ? JSON.stringify(event.provenance) : null, JSON.stringify(envelope), event.consistency ?? null],\n\t\t);\n\t}\n\n\tasync claimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`WITH claimable AS (\n\t\t\t\tSELECT id FROM fabric_platform.event_outbox\n\t\t\t\tWHERE status='pending' AND available_at <= $1\n\t\t\t\t AND (lease_expires_at IS NULL OR lease_expires_at <= $1)\n\t\t\t\t AND ($2::text IS NULL OR tenant_id=$2)\n\t\t\t\t AND ($3::text IS NULL OR space_id=$3)\n\t\t\t\tORDER BY created_at,id FOR UPDATE SKIP LOCKED LIMIT $4\n\t\t\t)\n\t\t\tUPDATE fabric_platform.event_outbox AS item\n\t\t\tSET lease_owner=$5, lease_expires_at=$6, lease_token=lease_token+1,\n\t\t\t attempt_count=attempt_count+1\n\t\t\tFROM claimable WHERE item.id=claimable.id RETURNING item.*`,\n\t\t\t[current, input.tenantId ?? null, input.spaceId ?? null, Math.max(1, Math.min(input.limit ?? 100, 1_000)), input.workerId, leaseExpiresAt],\n\t\t);\n\t\treturn result.rows.map(toOutboxRecord);\n\t}\n\n\tasync markOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void> {\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET status='published',published_at=$3,\n\t\t\t lease_owner=NULL,lease_expires_at=NULL\n\t\t\t WHERE id=$1 AND lease_owner=$2 AND lease_token=COALESCE($4,0) RETURNING id`,\n\t\t\t[id, workerId, publishedAt, leaseToken ?? null],\n\t\t);\n\t\tif (result.rows.length === 0) throw new Error(`Outbox record ${id} is not leased by ${workerId}.`);\n\t}\n\n\tasync markOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void> {\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET status=$3,last_error=$4,available_at=$5,\n\t\t\t lease_owner=NULL,lease_expires_at=NULL\n\t\t\t WHERE id=$1 AND lease_owner=$2 AND lease_token=COALESCE($6,0) RETURNING id`,\n\t\t\t[input.id, input.workerId, input.deadLetter ? \"dead_letter\" : \"pending\", input.error, input.availableAt, input.leaseToken ?? null],\n\t\t);\n\t\tif (result.rows.length === 0) throw new Error(`Outbox record ${input.id} is not leased by ${input.workerId}.`);\n\t}\n\n\tasync renewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET lease_expires_at=$5\n\t\t\t WHERE id=$1 AND status='pending' AND lease_owner=$2 AND lease_token=$3\n\t\t\t AND lease_expires_at > $4\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.workerId, input.leaseToken,\n\t\t\t\tcurrent, new Date(current.getTime() + input.leaseDurationMs)],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync listOutbox(input: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] } = {}): Promise<OutboxRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.event_outbox\n\t\t\t WHERE ($1::text IS NULL OR tenant_id=$1) AND ($2::text IS NULL OR space_id=$2)\n\t\t\t AND ($3::text[] IS NULL OR status=ANY($3::text[])) ORDER BY created_at,id`,\n\t\t\t[input.tenantId ?? null, input.spaceId ?? null, input.statuses?.length ? input.statuses : null],\n\t\t);\n\t\treturn result.rows.map(toOutboxRecord);\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\tconst result = await this.sql.query<{ next_sequence: string | number }>(\n\t\t\t`INSERT INTO fabric_platform.event_sequences (tenant_id,space_id,next_sequence)\n\t\t\t VALUES ($1,$2,1) ON CONFLICT (tenant_id,space_id) DO UPDATE\n\t\t\t SET next_sequence=fabric_platform.event_sequences.next_sequence+1\n\t\t\t RETURNING next_sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn Number(result.rows[0]!.next_sequence);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t) {\n\t\tconst result = await this.sql.query<{ state?: string }>(\n\t\t\t`SELECT payload->>'toState' AS state FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 AND subject_type=$3 AND subject_id=$4\n\t\t\t AND payload ? 'toState' ORDER BY sequence DESC LIMIT 1`,\n\t\t\t[tenantId, spaceId, entityType, entityId],\n\t\t);\n\t\treturn result.rows[0]?.state;\n\t}\n\n\tasync listActionInvocations(\n\t\tinput: ListActionInvocationsInput = {},\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst conditions: string[] = [];\n\t\tconst values: unknown[] = [];\n\t\tconst add = (condition: string, value: unknown) => {\n\t\t\tvalues.push(value);\n\t\t\tconditions.push(condition.replace(\"?\", `$${values.length}`));\n\t\t};\n\t\tif (input.tenantId) add(\"tenant_id=?\", input.tenantId);\n\t\tif (input.spaceId) add(\"space_id=?\", input.spaceId);\n\t\tif (input.statuses?.length) add(\"status = ANY(?::text[])\", [...input.statuses]);\n\t\tif (input.updatedBefore) add(\"updated_at<?\", input.updatedBefore);\n\t\tif (input.awaitingCompletion || input.completionDueBefore) conditions.push(\"pending_completion IS NOT NULL\");\n\t\tif (input.completionDueBefore) add(\"completion_due_at <= ?\", input.completionDueBefore);\n\t\tif (input.unleased) conditions.push(\"lease_owner IS NULL\");\n\t\tvalues.push(Math.max(1, Math.min(input.limit ?? 100, 1_000)));\n\t\tconst where = conditions.length ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.action_invocations ${where}\n\t\t\t ORDER BY created_at LIMIT $${values.length}`,\n\t\t\tvalues,\n\t\t);\n\t\treturn result.rows.map(toActionRecord);\n\t}\n\n\tasync getHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts> {\n\t\tconst result = await this.sql.query<Record<string, string | number>>(\n\t\t\t`SELECT\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='pending'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_backlog,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='running'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_running,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='running' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $3\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_expired_leases,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='waiting_for_approval'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_approval_waits,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='reconciliation_required'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_reconciliation_required,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='pending'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_backlog,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='pending' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $3\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_expired_leases,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='dead_letter'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_dead_letters`,\n\t\t\t[input.tenantId ?? null, input.spaceId ?? null, input.now],\n\t\t);\n\t\tconst row = result.rows[0] ?? {};\n\t\treturn {\n\t\t\tinvocationBacklog: Number(row.invocation_backlog ?? 0),\n\t\t\tinvocationRunning: Number(row.invocation_running ?? 0),\n\t\t\tinvocationExpiredLeases: Number(row.invocation_expired_leases ?? 0),\n\t\t\tinvocationApprovalWaits: Number(row.invocation_approval_waits ?? 0),\n\t\t\tinvocationReconciliationRequired: Number(row.invocation_reconciliation_required ?? 0),\n\t\t\toutboxBacklog: Number(row.outbox_backlog ?? 0),\n\t\t\toutboxExpiredLeases: Number(row.outbox_expired_leases ?? 0),\n\t\t\toutboxDeadLetters: Number(row.outbox_dead_letters ?? 0),\n\t\t};\n\t}\n\n\tasync claimActionInvocations(\n\t\tinput: ClaimActionInvocationsInput,\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst limit = Math.max(1, Math.min(input.limit ?? 10, 100));\n\t\tconst leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`WITH claimable AS (\n\t\t\t\tSELECT id FROM fabric_platform.action_invocations\n\t\t\t\tWHERE (status='pending' OR\n\t\t\t\t (status='running' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $1))\n\t\t\t\t AND ($2::text IS NULL OR tenant_id=$2)\n\t\t\t\t AND ($3::text IS NULL OR space_id=$3)\n\t\t\t\tORDER BY created_at\n\t\t\t\tFOR UPDATE SKIP LOCKED\n\t\t\t\tLIMIT $4\n\t\t\t)\n\t\t\tUPDATE fabric_platform.action_invocations AS invocation\n\t\t\tSET status='running', lease_owner=$5, lease_expires_at=$6,\n\t\t\t lease_token=lease_token+1, attempt_count=attempt_count+1, updated_at=$1\n\t\t\tFROM claimable WHERE invocation.id=claimable.id\n\t\t\tRETURNING invocation.*`,\n\t\t\t[current, input.tenantId ?? null, input.spaceId ?? null, limit, input.workerId,\n\t\t\t leaseExpiresAt],\n\t\t);\n\t\treturn result.rows.map(toActionRecord);\n\t}\n\n\tasync updateLeasedActionInvocation(input: import(\"./types\").UpdateLeasedActionInvocationInput): Promise<boolean> {\n\t\tconst patch = input.patch;\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t status=COALESCE($6,status), result=COALESCE($7::jsonb,result),\n\t\t\t error=CASE WHEN $8::boolean THEN $9 ELSE error END,\n\t\t\t authorization_reconciliation=CASE WHEN $10::boolean THEN $11::jsonb ELSE authorization_reconciliation END,\n\t\t\t adapter_reconciliation=CASE WHEN $12::boolean THEN $13::jsonb ELSE adapter_reconciliation END,\n\t\t\t pending_completion=CASE WHEN $14::boolean THEN $15::jsonb ELSE pending_completion END,\n\t\t\t completion_due_at=CASE WHEN $14::boolean THEN ($15::jsonb->>'dueAt')::timestamptz ELSE completion_due_at END,\n\t\t\t external_completion=CASE WHEN $16::boolean THEN $17::jsonb ELSE external_completion END,\n\t\t\t lease_owner=CASE WHEN ($15::jsonb IS NOT NULL AND $6='running') OR $6 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_owner END,\n\t\t\t lease_expires_at=CASE WHEN ($15::jsonb IS NOT NULL AND $6='running') OR $6 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_expires_at END,\n\t\t\t updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t AND status='running' AND lease_owner=$4 AND lease_token=$5\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.tenantId, input.spaceId, input.workerId, input.leaseToken,\n\t\t\t\tpatch.status ?? null,\n\t\t\t\tpatch.result === undefined ? null : JSON.stringify(patch.result),\n\t\t\t\tObject.hasOwn(patch, \"error\"), patch.error ?? null,\n\t\t\t\tObject.hasOwn(patch, \"authorizationReconciliation\"),\n\t\t\t\tpatch.authorizationReconciliation ? JSON.stringify(patch.authorizationReconciliation) : null,\n\t\t\t\tObject.hasOwn(patch, \"adapterReconciliation\"),\n\t\t\t\tpatch.adapterReconciliation ? JSON.stringify(patch.adapterReconciliation) : null,\n\t\t\t\tObject.hasOwn(patch, \"pendingCompletion\"),\n\t\t\t\tpatch.pendingCompletion ? JSON.stringify(patch.pendingCompletion) : null,\n\t\t\t\tObject.hasOwn(patch, \"externalCompletion\"),\n\t\t\t\tpatch.externalCompletion ? JSON.stringify(patch.externalCompletion) : null],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync renewActionInvocationLease(input: import(\"./types\").RenewActionInvocationLeaseInput): Promise<boolean> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations\n\t\t\t SET lease_expires_at=$6,updated_at=$5\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t AND status='running' AND lease_owner=$4 AND lease_token=$7\n\t\t\t AND lease_expires_at > $5\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.tenantId, input.spaceId, input.workerId, current,\n\t\t\t\tnew Date(current.getTime() + input.leaseDurationMs), input.leaseToken],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync listEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 ORDER BY sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toEventRecord);\n\t}\n\n\tasync getEvent(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<AssetEventEnvelope | undefined> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.asset_events\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toEventRecord(result.rows[0]) : undefined;\n\t}\n}\n\nfunction toAdapterRecord(row: Record<string, unknown>): AdapterInvocationRecord {\n\treturn {\n\t\tid: String(row.id),\n\t\tactionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id),\n\t\tspaceId: String(row.space_id),\n\t\tadapterType: String(row.adapter_type),\n\t\toperation: String(row.operation),\n\t\tvendor: String(row.vendor),\n\t\tstatus: String(row.status) as AdapterInvocationRecord[\"status\"],\n\t\tinput: row.input as Record<string, unknown>,\n\t\t...(row.output ? { output: row.output as Record<string, unknown> } : {}),\n\t\t...(row.error ? { error: String(row.error) } : {}),\n\t\tattempt: Number(row.attempt),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\tupdatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toPendingCompletion(value: Record<string, unknown>): NonNullable<ActionInvocationRecord[\"pendingCompletion\"]> {\n\treturn {\n\t\t...(value as unknown as NonNullable<ActionInvocationRecord[\"pendingCompletion\"]>),\n\t\tacceptedAt: new Date(value.acceptedAt as string),\n\t\t...(value.dueAt ? { dueAt: new Date(value.dueAt as string) } : {}),\n\t\t...(value.parkedAt ? { parkedAt: new Date(value.parkedAt as string) } : {}),\n\t};\n}\n\nfunction toExternalCompletion(value: Record<string, unknown>): NonNullable<ActionInvocationRecord[\"externalCompletion\"]> {\n\treturn {\n\t\t...(value as unknown as NonNullable<ActionInvocationRecord[\"externalCompletion\"]>),\n\t\trecordedAt: new Date(value.recordedAt as string),\n\t};\n}\n\nfunction toActionRecord(row: Record<string, unknown>): ActionInvocationRecord {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\tactionId: String(row.action_id) as ActionInvocationRecord[\"actionId\"],\n\t\tactionVersion: Number(row.action_version),\n\t\tactorId: String(row.actor_id),\n\t\tactorType: String(row.actor_type) as ActionInvocationRecord[\"actorType\"],\n\t\tstatus: String(row.status) as ActionInvocationRecord[\"status\"],\n\t\tparameters: row.parameters as Record<string, unknown>,\n\t\tresult: row.result as Record<string, unknown>, correlationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t\t...(row.idempotency_key ? { idempotencyKey: String(row.idempotency_key) } : {}),\n\t\t...(row.parameter_digest ? { parameterDigest: String(row.parameter_digest) } : {}),\n\t\t...(row.parameter_digest_algorithm ? { parameterDigestAlgorithm: String(row.parameter_digest_algorithm) as ActionInvocationRecord[\"parameterDigestAlgorithm\"] } : {}),\n\t\t...(row.idempotency_actor_id ? { idempotencyActorId: String(row.idempotency_actor_id) } : {}),\n\t\t...(row.idempotency_authorization_binding_id ? { idempotencyAuthorizationBindingId: String(row.idempotency_authorization_binding_id) } : {}),\n\t\t...(row.invocation_provenance ? { provenance: row.invocation_provenance as NonNullable<ActionInvocationRecord[\"provenance\"]> } : {}),\n\t\t...(row.authorization_binding ? { authorizationBinding: row.authorization_binding as NonNullable<ActionInvocationRecord[\"authorizationBinding\"]> } : {}),\n\t\t...(row.execution_reason ? { executionReason: String(row.execution_reason) } : {}),\n\t\t...(row.authorization_reconciliation ? { authorizationReconciliation: row.authorization_reconciliation as NonNullable<ActionInvocationRecord[\"authorizationReconciliation\"]> } : {}),\n\t\t...(row.adapter_reconciliation ? { adapterReconciliation: row.adapter_reconciliation as NonNullable<ActionInvocationRecord[\"adapterReconciliation\"]> } : {}),\n\t\t...(row.pending_completion ? { pendingCompletion: toPendingCompletion(row.pending_completion as Record<string, unknown>) } : {}),\n\t\t...(row.external_completion ? { externalCompletion: toExternalCompletion(row.external_completion as Record<string, unknown>) } : {}),\n\t\t...(row.authorization_binding_id\n\t\t\t? { authorizationBindingId: String(row.authorization_binding_id) }\n\t\t\t: {}),\n\t\tattemptCount: Number(row.attempt_count ?? 0),\n\t\tleaseToken: Number(row.lease_token ?? 0),\n\t\t...(row.lease_owner ? { leaseOwner: String(row.lease_owner) } : {}),\n\t\t...(row.lease_expires_at\n\t\t\t? { leaseExpiresAt: new Date(row.lease_expires_at as string | Date) }\n\t\t\t: {}),\n\t\t...(row.hitl_route\n\t\t\t? { hitlRoute: String(row.hitl_route) as ActionInvocationRecord[\"hitlRoute\"] }\n\t\t\t: {}),\n\t\t...(row.hitl_risk_tier\n\t\t\t? { hitlRiskTier: String(row.hitl_risk_tier) as ActionInvocationRecord[\"hitlRiskTier\"] }\n\t\t\t: {}),\n\t\t...(row.hitl_reason ? { hitlReason: String(row.hitl_reason) } : {}),\n\t\t...(row.hitl_policy_version\n\t\t\t? { hitlPolicyVersion: String(row.hitl_policy_version) }\n\t\t\t: {}),\n\t\t...(row.approval_decision\n\t\t\t? { approvalDecision: toApprovalDecision(row.approval_decision) }\n\t\t\t: {}),\n\t\t...(row.mutation_footprint\n\t\t\t? { mutationFootprint: row.mutation_footprint as NonNullable<ActionInvocationRecord[\"mutationFootprint\"]> }\n\t\t\t: {}),\n\t\t...(row.execution_principal\n\t\t\t? { executionPrincipal: row.execution_principal as NonNullable<ActionInvocationRecord[\"executionPrincipal\"]> }\n\t\t\t: {}),\n\t\t...(row.runtime_evidence\n\t\t\t? { runtimeEvidence: row.runtime_evidence as NonNullable<ActionInvocationRecord[\"runtimeEvidence\"]> }\n\t\t\t: {}),\n\t\t...(row.error ? { error: String(row.error) } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\tupdatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toObligationRecord(row: Record<string, unknown>): PolicyObligationRecord {\n\treturn {\n\t\tid: String(row.id), actionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id), spaceId: String(row.space_id), type: String(row.type),\n\t\tstatus: String(row.status) as PolicyObligationRecord[\"status\"], required: Boolean(row.required),\n\t\t...(row.description ? { description: String(row.description) } : {}),\n\t\t...(row.evidence_references ? { evidenceReferences: row.evidence_references as NonNullable<PolicyObligationRecord[\"evidenceReferences\"]> } : {}),\n\t\t...(row.metadata ? { metadata: row.metadata as Record<string, unknown> } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date), updatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toAttestationRecord(row: Record<string, unknown>): ExecutionAttestationRecord {\n\tconst attestation = row.attestation as Omit<ExecutionAttestationRecord, \"id\" | \"actionInvocationId\" | \"tenantId\" | \"spaceId\" | \"adapterInvocationId\" | \"recordedAt\">;\n\treturn {\n\t\t...attestation, id: String(row.id), actionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\t...(row.adapter_invocation_id ? { adapterInvocationId: String(row.adapter_invocation_id) } : {}),\n\t\trecordedAt: new Date(row.recorded_at as string | Date),\n\t};\n}\n\nfunction toApprovalDecision(value: unknown): NonNullable<ActionInvocationRecord[\"approvalDecision\"]> {\n\tconst decision = value as Record<string, unknown>;\n\treturn {\n\t\tapproved: Boolean(decision.approved),\n\t\tapproverId: String(decision.approverId),\n\t\tapproverType: String(decision.approverType) as NonNullable<\n\t\t\tActionInvocationRecord[\"approvalDecision\"]\n\t\t>[\"approverType\"],\n\t\t...(decision.reason ? { reason: String(decision.reason) } : {}),\n\t\t...(decision.editsReference\n\t\t\t? { editsReference: String(decision.editsReference) }\n\t\t\t: {}),\n\t\tdecidedAt: new Date(decision.decidedAt as string | Date),\n\t};\n}\n\nfunction toEventRecord(row: Record<string, unknown>): AssetEventEnvelope {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\teventType: String(row.event_type), eventSchemaVersion: Number(row.event_schema_version),\n\t\tsubjectType: String(row.subject_type), subjectId: String(row.subject_id),\n\t\tactorId: String(row.actor_id), actorType: String(row.actor_type),\n\t\t...(row.action_invocation_id\n\t\t\t? { actionInvocationId: String(row.action_invocation_id) }\n\t\t\t: {}),\n\t\tpayload: row.payload, sequence: Number(row.sequence),\n\t\toccurredAt: new Date(row.occurred_at as string | Date),\n\t\trecordedAt: new Date(row.recorded_at as string | Date),\n\t\tcorrelationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t\t...(row.provenance ? { provenance: row.provenance as NonNullable<AssetEventEnvelope[\"provenance\"]> } : {}),\n\t\t...(row.consistency ? { consistency: row.consistency as NonNullable<AssetEventEnvelope[\"consistency\"]> } : {}),\n\t};\n}\n\nfunction toOutboxRecord(row: Record<string, unknown>): OutboxRecord {\n\tconst event = row.event as Record<string, unknown>;\n\treturn {\n\t\tid: String(row.id),\n\t\ttenantId: String(row.tenant_id),\n\t\tspaceId: String(row.space_id),\n\t\tevent: {\n\t\t\teventId: String(event.eventId),\n\t\t\teventType: String(event.eventType),\n\t\t\teventSchemaVersion: Number(event.eventSchemaVersion),\n\t\t\ttenantId: String(event.tenantId),\n\t\t\tspaceId: String(event.spaceId),\n\t\t\tsubjectType: String(event.subjectType),\n\t\t\tsubjectId: String(event.subjectId),\n\t\t\tsequence: Number(event.sequence),\n\t\t\t...(event.actionInvocationId ? { actionInvocationId: String(event.actionInvocationId) } : {}),\n\t\t\tcorrelationId: String(event.correlationId),\n\t\t\t...(event.causationId ? { causationId: String(event.causationId) } : {}),\n\t\t\t...(event.provenance ? { provenance: event.provenance as NonNullable<EnterpriseEventEnvelope[\"provenance\"]> } : {}),\n\t\t\t...(event.consistency ? { consistency: event.consistency as NonNullable<EnterpriseEventEnvelope[\"consistency\"]> } : {}),\n\t\t\toccurredAt: new Date(event.occurredAt as string | Date),\n\t\t\trecordedAt: new Date(event.recordedAt as string | Date),\n\t\t\tproducerModuleVersion: String(event.producerModuleVersion),\n\t\t\tpayloadClassification: String(event.payloadClassification) as OutboxRecord[\"event\"][\"payloadClassification\"],\n\t\t\t...(event.traceContext ? { traceContext: event.traceContext as Record<string, string> } : {}),\n\t\t\tpayload: event.payload,\n\t\t},\n\t\tstatus: String(row.status) as OutboxStatus,\n\t\tattemptCount: Number(row.attempt_count),\n\t\tavailableAt: new Date(row.available_at as string | Date),\n\t\t...(row.lease_owner ? { leaseOwner: String(row.lease_owner) } : {}),\n\t\t...(row.lease_expires_at ? { leaseExpiresAt: new Date(row.lease_expires_at as string | Date) } : {}),\n\t\tleaseToken: Number(row.lease_token ?? 0),\n\t\t...(row.last_error ? { lastError: String(row.last_error) } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\t...(row.published_at ? { publishedAt: new Date(row.published_at as string | Date) } : {}),\n\t};\n}\n","import type {\n\tActionInvocationRecord,\n\tPlatformActionDispatcher,\n\tPlatformActionWorkerCycleResult,\n\tPlatformActionWorkerOptions,\n} from \"./types\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n\ttype PlatformHostTelemetry,\n\ttype PlatformHostTelemetryAttribute,\n} from \"./observability\";\n\nconst DEFAULT_BATCH_SIZE = 10;\nconst DEFAULT_LEASE_DURATION_MS = 5 * 60_000;\nconst DEFAULT_POLL_INTERVAL_MS = 1_000;\n\n/**\n * Durable store-backed dispatch: the pending invocation row is the queue item.\n * Repeated dispatches are safe because the workflow id is stable per invocation.\n */\nexport function createStoreBackedActionDispatcher(): PlatformActionDispatcher {\n\treturn {\n\t\tdispatch: async (input) => ({ workflowId: input.workflowId }),\n\t};\n}\n\n/** Claim and execute one bounded batch. Safe to run concurrently across workers. */\nexport async function runPlatformActionWorkerCycle<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n): Promise<PlatformActionWorkerCycleResult> {\n\tconst leaseDurationMs = options.leaseDurationMs ?? DEFAULT_LEASE_DURATION_MS;\n\temitWorkerTelemetry(options.telemetry, \"worker.cycle.started\", options.workerId);\n\t// Handoffs past their deadline are findings, not work to claim. The sweep\n\t// runs before the claim so a failure in it strands nothing, and so an\n\t// overdue callback is surfaced even on a cycle that claims nothing.\n\tif (options.sweepOverdueCompletions !== false && typeof options.host.reconcileOverdueCompletions === \"function\") {\n\t\ttry {\n\t\t\tawait options.host.reconcileOverdueCompletions({\n\t\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\toptions.onError?.(error);\n\t\t}\n\t}\n\tlet claimed: ActionInvocationRecord[];\n\ttry {\n\t\tclaimed = await options.store.claimActionInvocations({\n\t\t\tworkerId: options.workerId,\n\t\t\tlimit: options.batchSize ?? DEFAULT_BATCH_SIZE,\n\t\t\tleaseDurationMs,\n\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t});\n\t} catch (error) {\n\t\temitWorkerTelemetry(options.telemetry, \"worker.cycle.failed\", options.workerId);\n\t\tthrow error;\n\t}\n\tfor (const invocation of claimed) {\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.lease_claimed\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationLeaseClaimed,\n\t\t\toccurredAt: new Date(),\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tattributes: { attempt: invocation.attemptCount },\n\t\t});\n\t}\n\tlet completed = 0;\n\tlet failed = 0;\n\tlet waitingForApproval = 0;\n\tfor (const invocation of claimed) {\n\t\tconst stopHeartbeat = startLeaseHeartbeat(options, invocation, leaseDurationMs);\n\t\ttry {\n\t\t\tconst result = await options.host.executeInvocation(\n\t\t\t\tinvocation.id,\n\t\t\t\tinvocation.tenantId,\n\t\t\t\tinvocation.spaceId,\n\t\t\t\t{ leaseOwner: options.workerId, leaseToken: invocation.leaseToken },\n\t\t\t);\n\t\t\tif (result.status === \"completed\") completed += 1;\n\t\t\telse if (result.status === \"waiting_for_approval\") waitingForApproval += 1;\n\t\t\telse failed += 1;\n\t\t} catch (error) {\n\t\t\tfailed += 1;\n\t\t\toptions.onError?.(error, invocation);\n\t\t} finally {\n\t\t\tawait stopHeartbeat();\n\t\t}\n\t}\n\tconst result = {\n\t\tclaimed: claimed.length,\n\t\tcompleted,\n\t\tfailed,\n\t\t...(waitingForApproval > 0 ? { waitingForApproval } : {}),\n\t};\n\temitWorkerTelemetry(options.telemetry, \"worker.cycle.completed\", options.workerId, result);\n\treturn result;\n}\n\nfunction startLeaseHeartbeat<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n\tinvocation: ActionInvocationRecord,\n\tleaseDurationMs: number,\n): () => Promise<void> {\n\tif (!invocation?.leaseToken) return async () => undefined;\n\tconst intervalMs = options.leaseRenewalIntervalMs ??\n\t\tMath.max(1, Math.floor(leaseDurationMs / 3));\n\tlet stopped = false;\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet running: Promise<void> | undefined;\n\tconst schedule = () => {\n\t\tif (!stopped) timer = setTimeout(tick, intervalMs);\n\t};\n\tconst tick = () => {\n\t\trunning = options.store.renewActionInvocationLease({\n\t\t\tid: invocation.id,\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseToken: invocation.leaseToken!,\n\t\t\tleaseDurationMs,\n\t\t}).then((renewed) => {\n\t\t\tif (!renewed) options.onError?.(\n\t\t\t\tnew Error(`Invocation lease lost: ${invocation.id}`),\n\t\t\t\tinvocation,\n\t\t\t);\n\t\t}).catch((error: unknown) => options.onError?.(error, invocation))\n\t\t\t.finally(schedule);\n\t};\n\tschedule();\n\treturn async () => {\n\t\tstopped = true;\n\t\tif (timer) clearTimeout(timer);\n\t\tawait running;\n\t};\n}\n\n/** Poll until aborted. Each iteration is bounded and waits without busy-spinning. */\nexport async function runPlatformActionWorker<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n): Promise<void> {\n\twhile (!options.signal?.aborted) {\n\t\ttry {\n\t\t\tawait runPlatformActionWorkerCycle(options);\n\t\t} catch (error) {\n\t\t\toptions.onError?.(error);\n\t\t}\n\t\tawait abortableDelay(options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS, options.signal);\n\t}\n}\n\nasync function abortableDelay(milliseconds: number, signal?: AbortSignal): Promise<void> {\n\tif (signal?.aborted) return;\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, milliseconds);\n\t\tsignal?.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nfunction emitWorkerTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tname: \"worker.cycle.started\" | \"worker.cycle.completed\" | \"worker.cycle.failed\",\n\tworkerId: string,\n\tattributes?: Record<string, PlatformHostTelemetryAttribute>,\n): void {\n\tconst metricName = name === \"worker.cycle.started\"\n\t\t? PLATFORM_HOST_METRIC_NAMES.workerCyclesStarted\n\t\t: name === \"worker.cycle.completed\"\n\t\t\t? PLATFORM_HOST_METRIC_NAMES.workerCyclesCompleted\n\t\t\t: PLATFORM_HOST_METRIC_NAMES.workerCyclesFailed;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname,\n\t\tmetricName,\n\t\toccurredAt: new Date(),\n\t\tattributes: { workerId, ...attributes },\n\t});\n}\n","import { digestParameters } from \"./command-identity\";\nimport type {\n\tActionInvocationRecord,\n\tAtomicMutationPlatformHostStore,\n\tPlatformHostStore,\n} from \"./types\";\n\nconst TERMINAL_PARENT_STATUSES = new Set<ActionInvocationRecord[\"status\"]>([\n\t\"completed\",\n\t\"failed\",\n\t\"blocked_by_policy\",\n\t\"reconciliation_required\",\n\t\"validation_failed\",\n]);\n\ninterface HostSagaParentLifecycleIdentity {\n\t/** Stable identity shared by every retry of the same lifecycle transition. */\n\tlifecycleId?: string;\n}\n\n/**\n * Durable record of a single step completing within a saga parent.\n * Structurally compatible with {@link import(\"@fabricorg/platform-temporal\").SagaParentProgressRecord}.\n */\nexport interface HostSagaParentProgressRecord {\n\tstepId: string;\n\tindex: number;\n\ttotal: number;\n\tcompletedAt: string;\n}\n\nexport interface HostSagaParentProgressInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tprogress: HostSagaParentProgressRecord;\n}\n\nexport interface HostSagaParentApprovalInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tstepId: string;\n\tapprovalId: string;\n\treason: string;\n}\n\nexport interface HostSagaParentCancellationInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\treason: string;\n\tactorId: string;\n}\n\nexport interface HostSagaParentCompletionInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tresult: Record<string, unknown>;\n}\n\nexport interface HostSagaParentFailureInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\terror: string;\n\tcompensation: HostCompensationRecord[];\n}\n\nexport interface HostCompensationRecord {\n\tstepId: string;\n\tactionId: string;\n\terror?: string;\n}\n\n/**\n * Durable saga parent lifecycle contract backed by a Platform Host store.\n *\n * Structurally compatible with {@link import(\"@fabricorg/platform-temporal\").SagaParentLifecycle}\n * so an instance can be passed directly to\n * {@link import(\"@fabricorg/platform-temporal\").createSagaParentActivities}.\n *\n * Every transition is durable: the parent invocation row is the authoritative\n * state, and lifecycle events are the audit trail. A worker that rolls over\n * mid-saga can create a fresh adapter pointing at the same store and observe\n * the persisted progress, approval park, cancellation, completion, or failure\n * without in-memory state.\n */\nexport interface HostSagaParentLifecycle {\n\trecordProgress(input: HostSagaParentProgressInput): Promise<void>;\n\tparkApproval(input: HostSagaParentApprovalInput): Promise<void>;\n\tcancel(input: HostSagaParentCancellationInput): Promise<void>;\n\tcomplete(input: HostSagaParentCompletionInput): Promise<void>;\n\tfail(input: HostSagaParentFailureInput): Promise<void>;\n}\n\nexport interface CreateDurableSagaParentLifecycleOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\t/** Optional clock for deterministic tests. */\n\tnow?: () => Date;\n}\n\n/**\n * Create a {@link HostSagaParentLifecycle} backed by a Platform Host store.\n *\n * The parent invocation must already exist in the store (created by\n * `submitAction` or `createActionInvocation`). Each method appends a typed\n * lifecycle event and transitions the parent invocation to the appropriate\n * status so a fresh worker can observe the persisted state after a rollover.\n */\nexport function createDurableSagaParentLifecycle<TDb>(\n\toptions: CreateDurableSagaParentLifecycleOptions<TDb>,\n): HostSagaParentLifecycle {\n\tconst store = options.store;\n\tconst now = options.now ?? (() => new Date());\n\tconst transactionWithEvents = (\n\t\tstore as PlatformHostStore<TDb> & Partial<AtomicMutationPlatformHostStore<TDb>>\n\t).transactionWithEvents?.bind(store);\n\tif (!transactionWithEvents) {\n\t\tthrow new Error(\n\t\t\t\"Durable saga parent lifecycle requires store.transactionWithEvents for atomic event and parent updates.\",\n\t\t);\n\t}\n\tconst runInTransaction = transactionWithEvents;\n\n\tasync function applyLifecycleTransition(\n\t\tinput: {\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\tparentInvocationId: string;\n\t\t\tlifecycleId?: string;\n\t\t},\n\t\tlifecycleId: string,\n\t\teventType: string,\n\t\tpayload: Record<string, unknown>,\n\t\tpatch?: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\">>,\n\t): Promise<void> {\n\t\tconst eventId = `sagapar_${digestParameters({\n\t\t\tparentInvocationId: input.parentInvocationId,\n\t\t\tlifecycleId,\n\t\t}).slice(0, 40)}`;\n\t\tawait runInTransaction(async (transaction) => {\n\t\t\tif (!transaction.getActionInvocationForUpdate) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Durable saga parent lifecycle requires transaction.getActionInvocationForUpdate for serialization.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!transaction.getEvent) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Durable saga parent lifecycle requires transaction.getEvent for identity-scoped evidence lookup.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst parent = await transaction.getActionInvocationForUpdate(\n\t\t\t\tinput.parentInvocationId,\n\t\t\t\tinput.tenantId,\n\t\t\t\tinput.spaceId,\n\t\t\t);\n\t\t\tif (!parent) {\n\t\t\t\tthrow new Error(`Saga parent invocation not found: ${input.parentInvocationId}`);\n\t\t\t}\n\t\t\tconst prior = await transaction.getEvent(eventId, input.tenantId, input.spaceId);\n\t\t\tif (prior) {\n\t\t\t\tif (prior.eventType !== eventType ||\n\t\t\t\t\tdigestParameters(prior.payload) !== digestParameters(payload)) {\n\t\t\t\t\tthrow new Error(`Saga lifecycle identity ${lifecycleId} has contradictory evidence.`);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (TERMINAL_PARENT_STATUSES.has(parent.status)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Saga parent invocation ${input.parentInvocationId} is already terminal (${parent.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst sequence = await transaction.nextEventSequence(input.tenantId, input.spaceId);\n\t\t\tconst timestamp = now();\n\t\t\tawait transaction.appendEvent({\n\t\t\t\tid: eventId,\n\t\t\t\ttenantId: input.tenantId,\n\t\t\t\tspaceId: input.spaceId,\n\t\t\t\teventType,\n\t\t\t\teventSchemaVersion: 1,\n\t\t\t\tsubjectType: \"ActionInvocation\",\n\t\t\t\tsubjectId: input.parentInvocationId,\n\t\t\t\tactorId: \"system\",\n\t\t\t\tactorType: \"system\",\n\t\t\t\tactionInvocationId: input.parentInvocationId,\n\t\t\t\tpayload,\n\t\t\t\tsequence,\n\t\t\t\toccurredAt: timestamp,\n\t\t\t\trecordedAt: timestamp,\n\t\t\t\tcorrelationId: input.parentInvocationId,\n\t\t\t\tcausationId: lifecycleId,\n\t\t\t});\n\t\t\tif (patch) {\n\t\t\t\tawait transaction.updateActionInvocation(\n\t\t\t\t\tinput.parentInvocationId,\n\t\t\t\t\tinput.tenantId,\n\t\t\t\t\tinput.spaceId,\n\t\t\t\t\tpatch,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn {\n\t\tasync recordProgress(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:progress:${input.progress.stepId}:${input.progress.index}`,\n\t\t\t\t\"SagaParentProgress\",\n\t\t\t\t{\n\t\t\t\t\tstepId: input.progress.stepId,\n\t\t\t\t\tindex: input.progress.index,\n\t\t\t\t\ttotal: input.progress.total,\n\t\t\t\t\tcompletedAt: input.progress.completedAt,\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\n\t\tasync parkApproval(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:approval:${input.approvalId}`,\n\t\t\t\t\"SagaParentApprovalParked\",\n\t\t\t\t{\n\t\t\t\t\tstepId: input.stepId,\n\t\t\t\t\tapprovalId: input.approvalId,\n\t\t\t\t\treason: input.reason,\n\t\t\t\t},\n\t\t\t\t{ status: \"waiting_for_approval\" },\n\t\t\t);\n\t\t},\n\n\t\tasync cancel(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:cancel`,\n\t\t\t\t\"SagaParentCancelled\",\n\t\t\t\t{ reason: input.reason, actorId: input.actorId },\n\t\t\t\t{ status: \"failed\", error: `Saga cancelled: ${input.reason}` },\n\t\t\t);\n\t\t},\n\n\t\tasync complete(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:complete`,\n\t\t\t\t\"SagaParentCompleted\",\n\t\t\t\t{ result: input.result },\n\t\t\t\t{ status: \"completed\", result: input.result },\n\t\t\t);\n\t\t},\n\n\t\tasync fail(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:fail`,\n\t\t\t\t\"SagaParentFailed\",\n\t\t\t\t{ error: input.error, compensation: input.compensation },\n\t\t\t\t{ status: \"failed\", error: input.error },\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { ActionId, ActorType } from \"@fabricorg/platform\";\nimport type { GovernedActionHost, RecoverablePlatformHostStore } from \"./types\";\n\n// ── Tenant isolation conformance ────────────────────────────────────────────\n//\n// Every other seam ships an executable definition of correct. Isolation was\n// the guarantee every document asked for and every vertical tested itself.\n// These checks prove the kernel's part of it: a tenant's scope is a key on\n// every read and write, never a filter somebody remembered to add. What the\n// vertical's identity adapter derives into that scope is the identity port's\n// business, and its suite; what a projection authorizes is the projection\n// host's authorize hook, and the subject may lend one for the last check.\n\nexport interface TenantIsolationScope {\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n}\n\nexport interface TenantIsolationSubject<TDb = unknown> {\n\thost: GovernedActionHost;\n\tstore: RecoverablePlatformHostStore<TDb>;\n\t/** A governed action registered on the host, and parameters it accepts. */\n\tactionId: ActionId;\n\tparameters?: Record<string, unknown>;\n\t/** Two scopes in different tenants. */\n\tours: TenantIsolationScope;\n\ttheirs: TenantIsolationScope;\n\t/**\n\t * Optional: a governed read the subject exposes, scoped as the projection\n\t * host scopes it. Returns what a viewer in `scope` sees for the view. Every\n\t * row must carry the `tenantId` it belongs to, so the check can tell a row\n\t * of ours from a row of theirs that merely looks the same; two tenants may\n\t * legitimately hold equal-looking rows.\n\t */\n\tread?(scope: TenantIsolationScope): Promise<{ allowed: boolean; rows: readonly { tenantId: string }[] }>;\n\t/**\n\t * Optional: put the host and store back to a known state before a check.\n\t * The checks tolerate accumulated state, and each cleans up any row it\n\t * creates directly, so this exists for subjects whose store is shared.\n\t */\n\treset?(): Promise<void> | void;\n}\n\nexport interface TenantIsolationCheck {\n\tid:\n\t\t| \"fabric.tenancy.invocation-scoped-read.v1\"\n\t\t| \"fabric.tenancy.idempotency-key-scoped.v1\"\n\t\t| \"fabric.tenancy.events-scoped.v1\"\n\t\t| \"fabric.tenancy.worker-claim-scoped.v1\"\n\t\t| \"fabric.tenancy.completion-scoped.v1\"\n\t\t| \"fabric.tenancy.projection-scoped.v1\";\n\trun(subject: TenantIsolationSubject): Promise<string[]>;\n}\n\nexport interface TenantIsolationResult {\n\tpassed: boolean;\n\tchecks: Array<{ id: TenantIsolationCheck[\"id\"]; status: \"passed\" | \"failed\" | \"skipped\"; evidence: string[]; error?: string }>;\n}\n\nfunction fail(message: string): never {\n\tthrow new Error(message);\n}\n\nfunction submitInput(subject: TenantIsolationSubject, scope: TenantIsolationScope, idempotencyKey: string) {\n\treturn {\n\t\tactionId: subject.actionId,\n\t\tparameters: subject.parameters ?? {},\n\t\ttenantId: scope.tenantId,\n\t\tspaceId: scope.spaceId,\n\t\tactorId: scope.actorId,\n\t\tactorType: scope.actorType,\n\t\tidempotencyKey,\n\t};\n}\n\n/**\n * The suite any deployment of the host must pass before it claims isolation.\n *\n * Six checks: an invocation cannot be read, executed, or completed under\n * another tenant's scope; an idempotency key is a tenant's own, so the same\n * key in two tenants is two invocations; a tenant's event stream carries no\n * other tenant's events; a worker scoped to one tenant never claims another's\n * work; and, when the subject lends a read, a viewer in the other tenant sees\n * nothing of ours.\n */\nexport function tenantIsolationChecks(): readonly TenantIsolationCheck[] {\n\treturn [\n\t\t{\n\t\t\tid: \"fabric.tenancy.invocation-scoped-read.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tif (subject.ours.tenantId === subject.theirs.tenantId) fail(\"the two scopes must be in different tenants\");\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:read\"));\n\t\t\t\tconst crossRead = await subject.store.getActionInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\tif (crossRead !== undefined) fail(\"an invocation was readable under another tenant's scope\");\n\t\t\t\tconst shape = (record: { status?: unknown; result?: unknown; error?: unknown; attemptCount?: unknown; updatedAt?: unknown } | undefined) =>\n\t\t\t\t\tJSON.stringify({ status: record?.status, result: record?.result, error: record?.error, attemptCount: record?.attemptCount, updatedAt: record?.updatedAt });\n\t\t\t\tconst before = await subject.store.getActionInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (!before) fail(\"our own invocation was not readable under our scope, so the check proves nothing\");\n\t\t\t\t// Snapshotted now: a store may hand back its live record.\n\t\t\t\tconst untouched = shape(before);\n\t\t\t\tlet crossExecute: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tcrossExecute = await subject.host.executeInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\t} catch {\n\t\t\t\t\tcrossExecute = undefined;\n\t\t\t\t}\n\t\t\t\tif (crossExecute !== undefined) fail(\"an invocation was executable under another tenant's scope\");\n\t\t\t\t// Inert means untouched, not merely that nothing came back: a host\n\t\t\t\t// that read and wrote cross-tenant and then threw would otherwise pass.\n\t\t\t\tconst after = await subject.store.getActionInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (untouched !== shape(after)) fail(\"an execution attempted under another tenant's scope changed our invocation\");\n\t\t\t\treturn [\"invocation readable under our scope, invisible and untouched under the other tenant's\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.idempotency-key-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:shared-key\"));\n\t\t\t\tconst again = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:shared-key\"));\n\t\t\t\tif (ours.actionInvocationId !== again.actionInvocationId) fail(\"the same idempotency key in one tenant produced two invocations, so the key is not doing anything and the check proves nothing\");\n\t\t\t\tconst theirs = await subject.host.submitAction(submitInput(subject, subject.theirs, \"iso:shared-key\"));\n\t\t\t\tif (ours.actionInvocationId === theirs.actionInvocationId) fail(\"the same idempotency key in two tenants resolved to one invocation\");\n\t\t\t\treturn [\"one idempotency key: one invocation within a tenant, two across tenants\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.events-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:events\"));\n\t\t\t\tconst theirEvents = await subject.store.listEvents(subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\tconst leaked = theirEvents.filter((event) => event.tenantId === subject.ours.tenantId || event.actionInvocationId === ours.actionInvocationId);\n\t\t\t\tif (leaked.length > 0) fail(`${leaked.length} of our events appeared in the other tenant's stream`);\n\t\t\t\tconst ourEvents = await subject.store.listEvents(subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (!ourEvents.some((event) => event.actionInvocationId === ours.actionInvocationId)) fail(\"our own stream does not carry the event we just caused, so the check proves nothing\");\n\t\t\t\tif (ourEvents.some((event) => event.tenantId !== subject.ours.tenantId)) fail(\"another tenant's event appeared in our stream\");\n\t\t\t\treturn [\"event streams carry their own tenant's events and only those\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.worker-claim-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\t// A pending row in a space of our own that nothing else uses, so a\n\t\t\t\t// backlog cannot push it past the claim limit, and a claim scoped to\n\t\t\t\t// it cannot sweep up real work. The row is retired afterwards so a\n\t\t\t\t// live worker never runs it.\n\t\t\t\tconst probeSpace = `iso-probe-${Date.now()}`;\n\t\t\t\tconst created = await subject.store.createActionInvocation({\n\t\t\t\t\tid: `iso_pending_${Date.now()}`,\n\t\t\t\t\ttenantId: subject.ours.tenantId,\n\t\t\t\t\tspaceId: probeSpace,\n\t\t\t\t\tactionId: subject.actionId,\n\t\t\t\t\tactionVersion: 1,\n\t\t\t\t\tactorId: subject.ours.actorId,\n\t\t\t\t\tactorType: subject.ours.actorType,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tparameters: subject.parameters ?? {},\n\t\t\t\t\tresult: {},\n\t\t\t\t\tcorrelationId: `iso-corr-${Date.now()}`,\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tconst theirs = await subject.store.claimActionInvocations({\n\t\t\t\t\t\tworkerId: \"iso-worker\", leaseDurationMs: 1_000, limit: 1_000,\n\t\t\t\t\t\ttenantId: subject.theirs.tenantId, spaceId: probeSpace,\n\t\t\t\t\t});\n\t\t\t\t\tif (theirs.some((row) => row.id === created.id)) fail(\"a worker scoped to another tenant claimed our pending invocation\");\n\t\t\t\t\tconst ours = await subject.store.claimActionInvocations({\n\t\t\t\t\t\tworkerId: \"iso-worker\", leaseDurationMs: 1_000, limit: 1_000,\n\t\t\t\t\t\ttenantId: subject.ours.tenantId, spaceId: probeSpace,\n\t\t\t\t\t});\n\t\t\t\t\tif (!ours.some((row) => row.id === created.id)) fail(\"a worker scoped to our own tenant did not claim our pending invocation, so the check proves nothing\");\n\t\t\t\t} finally {\n\t\t\t\t\tawait subject.store.updateActionInvocation(created.id, subject.ours.tenantId, probeSpace, {\n\t\t\t\t\t\tstatus: \"failed\", error: \"tenant isolation probe; never executed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [\"tenant-scoped claim takes our work and leaves other tenants' alone\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.completion-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:complete\"));\n\t\t\t\tlet outcome: string;\n\t\t\t\ttry {\n\t\t\t\t\tawait subject.host.completeExternalInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId, {\n\t\t\t\t\t\texternalReference: \"iso-ref\", outcome: \"completed\", observedAt: new Date().toISOString(),\n\t\t\t\t\t});\n\t\t\t\t\toutcome = \"accepted\";\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst refusal = (error as { refusal?: string }).refusal;\n\t\t\t\t\toutcome = refusal ?? \"threw\";\n\t\t\t\t}\n\t\t\t\tif (outcome !== \"not_found\") fail(`a completion under another tenant's scope was ${outcome}; it must be refused as not_found`);\n\t\t\t\t// And under our own scope the invocation is found, whatever else it says.\n\t\t\t\tlet mine: string;\n\t\t\t\ttry {\n\t\t\t\t\tawait subject.host.completeExternalInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId, {\n\t\t\t\t\t\texternalReference: \"iso-ref\", outcome: \"completed\", observedAt: new Date().toISOString(),\n\t\t\t\t\t});\n\t\t\t\t\tmine = \"accepted\";\n\t\t\t\t} catch (error) {\n\t\t\t\t\tmine = (error as { refusal?: string }).refusal ?? \"threw\";\n\t\t\t\t}\n\t\t\t\tif (mine === \"not_found\") fail(\"a completion under our own scope was refused as not_found, so the check proves nothing\");\n\t\t\t\treturn [\"completion under the other tenant's scope refused as not_found; found under ours\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.projection-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tif (!subject.read) return [\"skipped: subject lends no read\"];\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tawait subject.host.submitAction(submitInput(subject, subject.ours, \"iso:projection\"));\n\t\t\t\tconst ours = await subject.read(subject.ours);\n\t\t\t\tconst theirs = await subject.read(subject.theirs);\n\t\t\t\tif (!ours.allowed) fail(\"our own viewer was denied the read\");\n\t\t\t\tif (ours.rows.length === 0) fail(\"our own viewer saw nothing, so the check proves nothing\");\n\t\t\t\tif (ours.rows.some((row) => row?.tenantId !== subject.ours.tenantId)) fail(\"our own viewer saw rows that are not ours, or rows carrying no tenant\");\n\t\t\t\t// The other tenant may have rows of its own; what it must not have\n\t\t\t\t// is any of ours. Rows say whose they are, so two tenants holding\n\t\t\t\t// equal-looking rows is not a leak.\n\t\t\t\tconst leaked = theirs.allowed ? theirs.rows.filter((row) => row?.tenantId === subject.ours.tenantId) : [];\n\t\t\t\tif (leaked.length > 0) fail(`a viewer in the other tenant saw ${leaked.length} of our rows`);\n\t\t\t\treturn [theirs.allowed ? \"other tenant's viewer sees none of our rows\" : \"other tenant's viewer is denied\"];\n\t\t\t},\n\t\t},\n\t];\n}\n\n/** Run every check, returning each result rather than throwing on the first. */\nexport async function runTenantIsolationChecks(subject: TenantIsolationSubject): Promise<TenantIsolationResult> {\n\tconst checks: TenantIsolationResult[\"checks\"] = [];\n\tfor (const check of tenantIsolationChecks()) {\n\t\ttry {\n\t\t\tconst evidence = await check.run(subject);\n\t\t\tchecks.push({ id: check.id, status: evidence[0]?.startsWith(\"skipped\") ? \"skipped\" : \"passed\", evidence });\n\t\t} catch (error) {\n\t\t\tchecks.push({ id: check.id, status: \"failed\", evidence: [], error: error instanceof Error ? error.message : String(error) });\n\t\t}\n\t}\n\treturn { passed: checks.every((check) => check.status !== \"failed\"), checks };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/command-identity.ts","../src/observability.ts","../src/host-internals.ts","../src/external-completion.ts","../src/submission-snapshot.ts","../src/outbox-requeue.ts","../src/host.ts","../src/outbox.ts","../src/memory-store.ts","../src/postgres-migrations.ts","../src/postgres-store.ts","../src/worker.ts","../src/saga-parent-lifecycle.ts","../src/tenant-isolation.ts"],"names":["actionResult","read","patch","createHash","utilTypes","out","createFabricId","durableParameters","parameterDigest","fail","governanceStore","result","deadlineMs","record","db","sql","lifecycleId"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n\tActionId,\n\tActionDefinition,\n\tActionStatus,\n\tAgentActionPolicyEvaluator,\n\tAgentActionRiskTier,\n\tAgentActionRoute,\n\tActorType,\n\tAdapterCircuitBreakerProvider,\n\tAdapterImplementation,\n\tAssetEventEnvelope,\n\tFabricRuntimeServices,\n\tPolicyOutcome,\n\tPolicyObligation,\n\tPolicyObligationStatus,\n\tExecutionAttestation,\n\tExternalReconciliation,\n\tEvidencePacketReference,\n\tMutationFootprint,\n\tExecutionPrincipal,\n\tMutationGovernanceResolver,\n\tGovernanceRuntimeEvidence,\n\tRuntimePolicyDefinition,\n\tModuleRegistry,\n} from \"@fabricorg/platform\";\nimport type { PlatformHostTelemetry } from \"./observability\";\nimport type { AssemblyLockfile } from \"@fabricorg/assembly\";\n\n/** Durable Host lifecycle generation, independent from the npm package version. */\nexport const PLATFORM_HOST_CONTRACT_VERSION = 2 as const;\n\nexport type InvocationSource = \"ui\" | \"api\" | \"agent\" | \"worker\" | \"system\" | (string & {});\nexport type NamespacedAttributes = Record<string, string>;\nexport interface InvocationProvenance {\n\tsource: InvocationSource;\n\tcorrelationId: string;\n\tcausationId?: string;\n\ttraceAttributes?: NamespacedAttributes;\n\tauditAttributes?: NamespacedAttributes;\n}\n\nexport type AuthorizationGoverningMoment = \"capture\" | \"execution\" | \"both\";\nexport interface AuthorizationBinding {\n\tid: string;\n\ttenantId: string;\n\tactorId: string;\n\tactionId: string;\n\tparameterDigest: string;\n\tresourceScope?: string;\n\tcapturedAt: string;\n\texpiresAt?: string;\n\tgoverningMoment: AuthorizationGoverningMoment;\n}\n\nexport interface IdempotencyConflict {\n\tcode: \"IDEMPOTENCY_CONFLICT\";\n\tidempotencyKey: string;\n\texistingInvocationId: string;\n\treasons: Array<\"actor\" | \"authority_binding\" | \"action_version\" | \"parameters\">;\n}\n\nexport class IdempotencyConflictError extends Error {\n\treadonly code = \"IDEMPOTENCY_CONFLICT\" as const;\n\tconstructor(readonly conflict: IdempotencyConflict) {\n\t\tsuper(`Idempotency key \"${conflict.idempotencyKey}\" conflicts with invocation ${conflict.existingInvocationId}: ${conflict.reasons.join(\", \")}`);\n\t\tthis.name = \"IdempotencyConflictError\";\n\t}\n}\n\n/**\n * Why `submitAction` did not admit a submission of an action that declares\n * `admitSubmission`: `refused`, the check answered `{ admitted: false, code }`\n * with a well-formed code; `failed`, it threw or is not a function;\n * `timed_out`, its answer did not settle within `admissionTimeoutMs`;\n * `invalid_decision`, it answered anything other than `{ admitted: true }`\n * or a well-formed refusal; `invalid_parameters`, the parameters are not a\n * JSON-data object Host could copy at submission (a Proxy, a function, a\n * Date, a typed array or SharedArrayBuffer, a cycle, a getter that throws).\n */\nexport type ActionAdmissionRefusal = \"refused\" | \"failed\" | \"timed_out\" | \"invalid_decision\" | \"invalid_parameters\";\n\n/**\n * Thrown by `submitAction` when a declared admission check did not admit the\n * submission. Host wrote nothing for it: no invocation, idempotency key,\n * event, policy record or error. The message holds the action id, the\n * refusal and, for `refused`, the check's code; never a submitted value or\n * anything the check threw.\n */\nexport class ActionAdmissionError extends Error {\n\treadonly code = \"ACTION_ADMISSION_REFUSED\" as const;\n\tconstructor(\n\t\treadonly actionId: string,\n\t\treadonly refusal: ActionAdmissionRefusal,\n\t\t/** The check's own code, present only for `refused`. */\n\t\treadonly refusalCode?: string,\n\t) {\n\t\tsuper(`Action ${actionId} submission was not admitted (${refusal}${refusalCode ? `: ${refusalCode}` : \"\"}); nothing was recorded.`);\n\t\tthis.name = \"ActionAdmissionError\";\n\t}\n}\n\nexport type ExternalCompletionRefusal =\n\t| \"still_executing\"\n\t| \"not_found\"\n\t| \"not_awaiting\"\n\t| \"immediate_contract\"\n\t| \"reference_mismatch\"\n\t| \"provider_mismatch\"\n\t| \"invalid_completion\"\n\t| \"result_invalid\";\n\n/**\n * Why a completion was not applied, typed so a webhook handler can answer\n * the external system correctly: `retryable` means the invocation is still\n * being finalized and the same callback will be accepted once it parks, so\n * answer with something the sender retries; anything else is permanent and\n * a retry will get the same refusal.\n */\nexport class ExternalCompletionError extends Error {\n\treadonly code = \"EXTERNAL_COMPLETION_REFUSED\" as const;\n\tconstructor(readonly refusal: ExternalCompletionRefusal, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"ExternalCompletionError\";\n\t}\n\tget retryable(): boolean {\n\t\treturn this.refusal === \"still_executing\";\n\t}\n}\n\nexport interface PendingAssetEvent {\n\teventType: string;\n\tsubjectType: string;\n\tsubjectId: string;\n\tpayload: unknown;\n\teventSchemaVersion?: number;\n}\n\nexport interface ActionInvocationRecord {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tactionId: ActionId;\n\tactionVersion: number;\n\tactorId: string;\n\tactorType: ActorType;\n\tstatus: ActionStatus;\n\tparameters: Record<string, unknown>;\n\tresult: Record<string, unknown>;\n\tcorrelationId: string;\n\tcausationId?: string;\n\tidempotencyKey?: string;\n\tparameterDigest?: string;\n\tparameterDigestAlgorithm?: \"fabric-canonical-json-sha256-v1\";\n\tidempotencyActorId?: string;\n\tidempotencyAuthorizationBindingId?: string;\n\tprovenance?: Omit<InvocationProvenance, \"traceAttributes\">;\n\tauthorizationBinding?: AuthorizationBinding;\n\texecutionReason?: ActionExecutionReason;\n\tauthorizationReconciliation?: AuthorizationReconciliationOutcome;\n\t/** Durable evidence when an adapter returned an ambiguous outcome requiring reconciliation. */\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/**\n\t * A handoff the host is waiting on. While present the invocation is\n\t * `running` without a lease: it is not stuck, it is somebody else's turn,\n\t * and the recovery worker must not re-execute it.\n\t */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** The completion an external system delivered, kept so a repeat is recognised and a contradiction is caught. */\n\texternalCompletion?: RecordedExternalCompletion;\n\t/** Opaque, non-secret reference used to revalidate delegated execution authority. */\n\tauthorizationBindingId?: string;\n\tattemptCount: number;\n\tleaseOwner?: string;\n\tleaseExpiresAt?: Date;\n\t/** Monotonic claim generation used to reject writes from expired workers. */\n\tleaseToken?: number;\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n\thitlReason?: string;\n\thitlPolicyVersion?: string;\n\tapprovalDecision?: PersistedActionApprovalDecision;\n\tmutationFootprint?: MutationFootprint;\n\texecutionPrincipal?: ExecutionPrincipal;\n\truntimeEvidence?: GovernanceRuntimeEvidence;\n\t/**\n\t * When `submitAction` admitted the submission through the action's\n\t * `admitSubmission` check, set on creation and never patched. Host refuses\n\t * to execute an invocation of an action that declares the check when this\n\t * is absent, and passes it to the handler as `ActionContext.admittedAt`.\n\t */\n\tadmittedAt?: Date;\n\terror?: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface AuthorizationReconciliationOutcome {\n\tkind: \"authorization_expired\" | \"authorization_denied\" | \"authorization_missing_capture_evidence\";\n\tgoverningMoment: AuthorizationGoverningMoment;\n\texecutionReason: ActionExecutionReason;\n\tauthorizationBindingId?: string;\n\tprovenance?: Omit<InvocationProvenance, \"traceAttributes\">;\n\tmessage: string;\n}\n\nexport interface HitlDecisionEvidence {\n\troute: AgentActionRoute;\n\triskTier: AgentActionRiskTier;\n\treason: string;\n\tpolicyVersion?: string;\n\tevaluatedAt: Date;\n}\n\nexport interface ActionApprovalDecision {\n\tapproved: boolean;\n\tapproverId: string;\n\tapproverType: ActorType;\n\treason?: string;\n\teditsReference?: string;\n\tdecidedAt?: Date;\n}\n\nexport interface PersistedActionApprovalDecision\n\textends Omit<ActionApprovalDecision, \"decidedAt\"> {\n\tdecidedAt: Date;\n}\n\nexport interface PolicyEvaluationRecord {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\toutcome: PolicyOutcome;\n\tcreatedAt: Date;\n}\n\nexport interface PolicyObligationRecord extends PolicyObligation {\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface ExecutionAttestationRecord extends ExecutionAttestation {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tadapterInvocationId?: string;\n\trecordedAt: Date;\n}\n\nexport interface ExternalReconciliationRecord extends ExternalReconciliation {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n}\n\nexport interface PendingExternalCompletion {\n\tprovider: string;\n\tadapterType: string;\n\toperation: string;\n\tadapterInvocationId: string;\n\texternalReference: string;\n\tacceptedAt: Date;\n\t/** Past this instant the host moves the invocation to reconciliation. */\n\tdueAt?: Date;\n\t/**\n\t * Set when the invocation finished executing and parked. A handoff is\n\t * recorded before the remaining steps run, so until this is set a\n\t * completion has nothing settled to settle into; it is asked to retry.\n\t */\n\tparkedAt?: Date;\n}\n\n/**\n * What an external system reports when it finishes work the host accepted.\n *\n * Matched to the invocation by `externalReference`, never by guesswork: a\n * completion that names a reference the invocation is not waiting on is\n * refused, because completing the wrong invocation is worse than dropping a\n * callback.\n */\nexport interface ExternalCompletion {\n\texternalReference: string;\n\toutcome: \"completed\" | \"failed\";\n\t/** Merged over the handler's result on completion. */\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\tprovider?: string;\n\tevidenceReferences?: EvidencePacketReference[];\n\tobservedAt: Date | string;\n}\n\nexport interface RecordedExternalCompletion extends ExternalCompletion {\n\trecordedAt: Date;\n\t/**\n\t * Canonical digest of provider, reference, outcome, result, error, and\n\t * evidence. A repeat with the same digest is the same news; a repeat with\n\t * the same outcome and a different digest is changed evidence, and is a\n\t * contradiction like a flipped outcome. Observation time is left out,\n\t * since a redelivery legitimately carries a new one.\n\t */\n\tdigest: string;\n}\n\nexport interface ReconcileOverdueCompletionsInput {\n\ttenantId?: string;\n\tspaceId?: string;\n\tlimit?: number;\n\tnow?: Date;\n}\n\nexport type AdapterInvocationStatus = \"running\" | \"succeeded\" | \"failed\" | \"ambiguous\";\n\nexport interface AdapterReconciliationOutcome {\n\tkind: \"adapter_outcome_ambiguous\";\n\tadapterType: string;\n\toperation: string;\n\tvendor: string;\n\tadapterInvocationId: string;\n\treason?: string;\n\t/** Opaque, non-secret reference to external operation state for reconciliation. */\n\texternalReference?: string;\n\tmessage: string;\n}\n\nexport interface AdapterInvocationRecord {\n\tid: string;\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tadapterType: string;\n\toperation: string;\n\tvendor: string;\n\tstatus: AdapterInvocationStatus;\n\tinput: Record<string, unknown>;\n\toutput?: Record<string, unknown>;\n\terror?: string;\n\tattempt: number;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport interface CreateActionInvocationInput\n\textends Omit<\n\t\tActionInvocationRecord,\n\t\t\"createdAt\" | \"updatedAt\" | \"attemptCount\" | \"leaseOwner\" | \"leaseExpiresAt\" | \"leaseToken\"\n\t> {}\n\nexport interface PlatformHostStore<TDb> {\n\treadonly db: TDb;\n\t/**\n\t * Run against the store's domain handle. This base seam does not promise a\n\t * database transaction. Use `transactionWithEvents` when domain writes,\n\t * canonical events, and invocation state must commit atomically.\n\t */\n\ttransaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult>;\n\tcreateActionInvocation(input: CreateActionInvocationInput): Promise<ActionInvocationRecord>;\n\tgetActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined>;\n\tupdateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void>;\n\tappendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void>;\n\tcreateAdapterInvocation(record: AdapterInvocationRecord): Promise<void>;\n\tgetAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined>;\n\tupdateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void>;\n\tappendEvent(event: AssetEventEnvelope): Promise<void>;\n\tnextEventSequence(tenantId: string, spaceId: string): Promise<number>;\n\tgetEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined>;\n}\n\n/**\n * Transaction-scoped Host operations used to commit domain writes and their\n * canonical events as one unit of work.\n *\n * The supplied `db` must be bound to the same database transaction as every\n * lifecycle method on this object. Implementations must roll the whole unit\n * back when `run` throws.\n */\nexport interface PlatformHostMutationTransaction<TDb> {\n\treadonly db: TDb;\n\t/**\n\t * Read and lock an invocation until this transaction completes.\n\t * Required by serialized saga parent lifecycle transitions.\n\t */\n\tgetActionInvocationForUpdate?(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined>;\n\t/**\n\t * Read one event by its stable identity inside the transaction.\n\t * Required by serialized saga parent lifecycle transitions.\n\t */\n\tgetEvent?(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<AssetEventEnvelope | undefined>;\n\tappendEvent(event: AssetEventEnvelope): Promise<void>;\n\tappendEventWithOutbox?(\n\t\tevent: AssetEventEnvelope,\n\t\tmetadata: OutboxEventMetadata,\n\t): Promise<void>;\n\tnextEventSequence(tenantId: string, spaceId: string): Promise<number>;\n\tlistEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]>;\n\tgetEntityState?(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined>;\n\tupdateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void>;\n\tupdateLeasedActionInvocation?(\n\t\tinput: UpdateLeasedActionInvocationInput,\n\t): Promise<boolean>;\n}\n\nexport type OutboxStatus = \"pending\" | \"published\" | \"dead_letter\";\nexport type EventPayloadClassification = \"public\" | \"internal\" | \"confidential\" | \"restricted\";\n\nexport interface OutboxEventMetadata {\n\tproducerModuleVersion: string;\n\tpayloadClassification: EventPayloadClassification;\n\ttraceContext?: Record<string, string>;\n\tincludeProvenance?: boolean;\n\t/**\n\t * Only `true` puts the event's `actorId` and `actorType` on the outbox envelope. Absent or any\n\t * other value leaves them off, and the outbox record says the actor was `suppressed`.\n\t */\n\tincludeActor?: boolean;\n}\n\n/**\n * Whether Host put actor identity on an outbox record's envelope, decided by `includeActor` when\n * the record was written. A record has no value when it predates the decision (`legacy`).\n */\nexport type OutboxActorDisclosure = \"included\" | \"suppressed\";\n\n/**\n * What the relay tells a publisher about an envelope's actor identity: the record's\n * `OutboxActorDisclosure`, or `legacy` for a record with none. The memory and PostgreSQL stores\n * hydrate actor identity only for `included` records, so their legacy and suppressed envelopes carry\n * none; a consumer that needs it reads the canonical event.\n */\nexport type EnterpriseEventActorDisclosure = OutboxActorDisclosure | \"legacy\";\n\nexport interface EnterpriseEventEnvelope {\n\teventId: string;\n\teventType: string;\n\teventSchemaVersion: number;\n\ttenantId: string;\n\tspaceId: string;\n\tsubjectType: string;\n\tsubjectId: string;\n\tsequence: number;\n\tactionInvocationId?: string;\n\tcorrelationId: string;\n\tcausationId?: string;\n\t/** Present only when `includeActor` opted this event in; the key is absent otherwise. */\n\tactorId?: string;\n\t/** Present only when `includeActor` opted this event in; the key is absent otherwise. */\n\tactorType?: string;\n\toccurredAt: Date;\n\trecordedAt: Date;\n\tproducerModuleVersion: string;\n\tpayloadClassification: EventPayloadClassification;\n\ttraceContext?: Record<string, string>;\n\tprovenance?: { source: InvocationSource; auditAttributes?: NamespacedAttributes };\n\t/** Present only for events an action declaring provisional consistency emitted. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\tpayload: unknown;\n}\n\nexport interface OutboxRecord {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tevent: EnterpriseEventEnvelope;\n\t/** Absent for a record written before Host recorded the `includeActor` decision. */\n\tactorDisclosure?: OutboxActorDisclosure;\n\tstatus: OutboxStatus;\n\tattemptCount: number;\n\tavailableAt: Date;\n\tleaseOwner?: string;\n\tleaseExpiresAt?: Date;\n\tleaseToken?: number;\n\tlastError?: string;\n\tcreatedAt: Date;\n\tpublishedAt?: Date;\n}\n\nexport interface ClaimOutboxInput {\n\tworkerId: string;\n\tleaseDurationMs: number;\n\tlimit?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: Date;\n}\n\nexport interface OutboxPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\t/** True only when transactionWithEvents supplies appendEventWithOutbox in the same unit of work. */\n\treadonly transactionalOutbox?: boolean;\n\tappendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void>;\n\tclaimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]>;\n\tmarkOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void>;\n\tmarkOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void>;\n\trenewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean>;\n\tlistOutbox(input?: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] }): Promise<OutboxRecord[]>;\n}\n\n/**\n * Append-only evidence of one operator requeue of a dead-lettered outbox\n * record. The `prior*` fields are the dead-letter state the requeue replaced,\n * so the failure that exhausted the record stays readable after its attempt\n * budget is reset.\n */\nexport interface OutboxRequeueRecord {\n\tid: string;\n\toutboxId: string;\n\ttenantId: string;\n\tspaceId: string;\n\teventId: string;\n\tactorId: string;\n\tactorType: ActorType;\n\t/** Operator-supplied justification, persisted as audit evidence. Must not carry secrets. */\n\treason: string;\n\trequeuedAt: Date;\n\t/** When the requeued record became claimable again. */\n\tavailableAt: Date;\n\tpriorAttemptCount: number;\n\tpriorLastError?: string;\n\tpriorAvailableAt: Date;\n\tpriorLeaseToken: number;\n}\n\nexport interface RequeueOutboxDeadLetterStoreInput {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\t/** Identity of the evidence row written with the transition. */\n\trequeueId: string;\n\tactorId: string;\n\tactorType: ActorType;\n\treason: string;\n\trequeuedAt: Date;\n\tavailableAt: Date;\n\t/**\n\t * The lease token of the dead letter the caller read and authorized. Every\n\t * claim increments the token and a requeue never lowers it, so a record\n\t * that was requeued, claimed and dead-lettered again carries a higher token\n\t * than the one observed, and the requeue is refused as `stale`.\n\t */\n\texpectedLeaseToken: number;\n}\n\n/**\n * `not_found`: no record with this id in the tenant and space, including a\n * record that exists under another tenant or space. `not_dead_letter`: the\n * record exists but is pending or published, for example because another\n * requeue won the compare-and-set. `stale`: the record is a dead letter\n * again, but not the one the caller observed; read and authorize it afresh.\n */\nexport type OutboxRequeueRefusal = \"not_found\" | \"not_dead_letter\" | \"stale\";\n\nexport type RequeueOutboxDeadLetterStoreResult =\n\t| { applied: true; record: OutboxRecord; requeue: OutboxRequeueRecord }\n\t| { applied: false; refusal: OutboxRequeueRefusal; currentStatus?: OutboxStatus };\n\n/**\n * Optional outbox capability that moves a dead-lettered record back to\n * pending. Kept apart from `OutboxPlatformHostStore` so a custom outbox store\n * that predates it still satisfies that interface.\n */\nexport interface OutboxRequeuePlatformHostStore<TDb> extends OutboxPlatformHostStore<TDb> {\n\tgetOutboxRecord(id: string, tenantId: string, spaceId: string): Promise<OutboxRecord | undefined>;\n\t/**\n\t * Compare-and-set from `dead_letter` at `expectedLeaseToken` to `pending`\n\t * within the tenant and space: resets `attemptCount` to 0, sets\n\t * `availableAt`, clears any lease owner while keeping the lease token,\n\t * keeps `lastError`, and appends one `OutboxRequeueRecord` in the same\n\t * atomic step. A record in any other state, at another lease token, or in\n\t * another scope is refused and nothing is written. The returned requeue\n\t * evidence shares nothing with stored history. The returned outbox record\n\t * has its own Date fields; its event payload and provenance are shallow.\n\t */\n\trequeueOutboxDeadLetter(input: RequeueOutboxDeadLetterStoreInput): Promise<RequeueOutboxDeadLetterStoreResult>;\n\t/** Requeue evidence for a scope, oldest first; `outboxId` narrows it to one record. */\n\tlistOutboxRequeues(input: { tenantId: string; spaceId: string; outboxId?: string }): Promise<OutboxRequeueRecord[]>;\n}\n\nexport interface RequeueOutboxDeadLetterInput {\n\toutboxId: string;\n\ttenantId: string;\n\tspaceId: string;\n\t/** Trusted operator identity from the caller's authenticated session, never from request input. */\n\tactorId: string;\n\tactorType: ActorType;\n\t/** Required justification, at most 1,000 characters, persisted as audit evidence. */\n\treason: string;\n\t/** When the record becomes claimable again; defaults to the host clock. */\n\tavailableAt?: Date;\n}\n\nexport type RequeueOutboxDeadLetterRefusal = OutboxRequeueRefusal | \"not_authorized\";\n\nexport type RequeueOutboxDeadLetterResult =\n\t| { status: \"requeued\"; record: OutboxRecord; requeue: OutboxRequeueRecord }\n\t| {\n\t\tstatus: \"refused\";\n\t\trefusal: RequeueOutboxDeadLetterRefusal;\n\t\t/** Present for `not_dead_letter` and `stale`: the state the record was found in. */\n\t\tcurrentStatus?: OutboxStatus;\n\t\tmessage: string;\n\t};\n\n/** Facts given to `authorizeOutboxRequeue`. `record` is absent when no record with this id exists in the scope. */\nexport interface OutboxRequeueAuthorizationInput {\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n\toutboxId: string;\n\treason: string;\n\trecord?: Pick<OutboxRecord[\"event\"], \"eventId\" | \"eventType\" | \"payloadClassification\"> &\n\t\tPick<OutboxRecord, \"status\" | \"attemptCount\">;\n}\n\n/**\n * Optional production capability for atomic domain/event persistence.\n *\n * A mutating Host action uses this capability when available. Stores that do\n * not implement it retain the legacy transaction boundary for compatibility,\n * but cannot claim atomic domain-write/event persistence.\n */\nexport interface AtomicMutationPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\ttransactionWithEvents<TResult>(\n\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t): Promise<TResult>;\n}\n\nexport interface BeginApprovalDecisionInput {\n\tactionInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tdecision: PersistedActionApprovalDecision;\n\tleaseOwner: string;\n\tleaseDurationMs: number;\n\tnow: Date;\n}\n\nexport interface ApprovalDecisionTransitionResult {\n\tapplied: boolean;\n\tinvocation?: ActionInvocationRecord;\n}\n\n/** Optional store capability required only when agent HITL or approval resume is used. */\nexport interface ApprovalPlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\trecordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord>;\n\tbeginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult>;\n}\n\n/** Optional durable capabilities used when external-governance enrichment is configured. */\nexport interface GovernancePlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\trecordMutationGovernance(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcontext: { footprint: MutationFootprint; executionPrincipal: ExecutionPrincipal },\n\t): Promise<ActionInvocationRecord>;\n\tappendPolicyObligations(records: PolicyObligationRecord[]): Promise<void>;\n\tlistPolicyObligations(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<PolicyObligationRecord[]>;\n\tupdatePolicyObligation(\n\t\tactionInvocationId: string,\n\t\tobligationId: string,\n\t\tstatus: PolicyObligationStatus,\n\t\tevidenceReferences?: PolicyObligation[\"evidenceReferences\"],\n\t): Promise<void>;\n\tappendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void>;\n\tlistExecutionAttestations(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ExecutionAttestationRecord[]>;\n\tappendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void>;\n}\n\nexport interface ListActionInvocationsInput {\n\ttenantId?: string;\n\tspaceId?: string;\n\tstatuses?: readonly ActionStatus[];\n\tupdatedBefore?: Date;\n\t/** Only invocations holding a pending external completion. */\n\tawaitingCompletion?: boolean;\n\t/** Only pending completions due at or before this instant. Implies `awaitingCompletion`. */\n\tcompletionDueBefore?: Date;\n\t/** Only invocations no worker holds a lease on. */\n\tunleased?: boolean;\n\tlimit?: number;\n}\n\nexport interface ClaimActionInvocationsInput {\n\tworkerId: string;\n\tleaseDurationMs: number;\n\tlimit?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: Date;\n}\n\n/**\n * What the host writes back to an invocation.\n *\n * Store obligations for `pendingCompletion`, which a custom store must honour\n * or the recovery worker will re-run an external handoff:\n * - a patch that sets `pendingCompletion` together with `status: \"running\"`\n * parks the invocation and must clear its lease;\n * - a patch that sets `pendingCompletion` without a status records the handoff\n * and must leave the lease alone;\n * - a patch with `pendingCompletion: undefined` clears it;\n * - `claimActionInvocations` must never claim a running invocation without a\n * lease, which is what a parked invocation is.\n */\nexport type ActionInvocationPatch = Partial<\n\tPick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\" | \"pendingCompletion\" | \"externalCompletion\">\n>;\n\nexport interface UpdateLeasedActionInvocationInput {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tworkerId: string;\n\tleaseToken: number;\n\tpatch: ActionInvocationPatch;\n}\n\nexport interface RenewActionInvocationLeaseInput {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\tworkerId: string;\n\tleaseToken: number;\n\tleaseDurationMs: number;\n\tnow?: Date;\n}\n\n/** Store capabilities required by the durable polling worker and operator tooling. */\nexport interface RecoverablePlatformHostStore<TDb> extends PlatformHostStore<TDb> {\n\tlistActionInvocations(input?: ListActionInvocationsInput): Promise<ActionInvocationRecord[]>;\n\tclaimActionInvocations(input: ClaimActionInvocationsInput): Promise<ActionInvocationRecord[]>;\n\tupdateLeasedActionInvocation(input: UpdateLeasedActionInvocationInput): Promise<boolean>;\n\trenewActionInvocationLease(input: RenewActionInvocationLeaseInput): Promise<boolean>;\n\tlistEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]>;\n}\n\nexport interface ActionAuthorizationInput {\n\tactionId: ActionId;\n\tnamespace: string;\n\trequiredPermissions: readonly string[];\n\trequiredRoles: readonly string[];\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n}\n\nexport type KnownActionExecutionReason = \"initial\" | \"approval_resume\" | \"recovery\" | \"offline_replay\";\nexport type ActionExecutionReason = KnownActionExecutionReason | (string & {});\n\n/**\n * Trusted execution-boundary authorization input.\n *\n * Parameters are the schema-parsed durable parameters, never caller-supplied\n * transient values. `invocation` is the canonical record that will execute.\n */\nexport interface ActionExecutionAuthorizationInput extends ActionAuthorizationInput {\n\tactionInvocationId: string;\n\tparameters: unknown;\n\tinvocation: Readonly<ActionInvocationRecord>;\n\texecutionReason: ActionExecutionReason;\n}\n\n/**\n * Input to `resolvePolicies`. Carries the invocation identity and the\n * schema-parsed durable (post-redaction) parameters so a resolver can choose\n * the policy snapshot pinned to this specific invocation. Host keeps the first\n * persisted evaluation per invocation and policy, so return the same snapshot\n * for an `actionInvocationId` on every attempt.\n */\nexport interface ResolvePoliciesInput extends ActionExecutionAuthorizationInput {\n\tdeclaredPolicyIds: readonly string[];\n}\n\nexport interface PlatformHostAuthorization {\n\tcheckEntitlement(input: ActionAuthorizationInput): Promise<boolean>;\n\tauthorize(input: ActionAuthorizationInput): Promise<boolean>;\n\t/**\n\t * Optional final authorization immediately before policies and mutation\n\t * execution. When absent, the Host reuses `authorize` at this boundary.\n\t */\n\tauthorizeExecution?(input: ActionExecutionAuthorizationInput): Promise<boolean>;\n\t/** Optional distinct authorization boundary for human/system approval decisions. */\n\tauthorizeApproval?(\n\t\tinput: ActionAuthorizationInput & { decision: ActionApprovalDecision },\n\t): Promise<boolean>;\n\t/**\n\t * Authorization for `requeueOutboxDeadLetter`. There is no action to fall\n\t * back to, so when this is absent every requeue is refused as\n\t * `not_authorized`. A throw propagates and nothing is requeued.\n\t */\n\tauthorizeOutboxRequeue?(input: OutboxRequeueAuthorizationInput): Promise<boolean>;\n}\n\nexport interface DispatchActionInput {\n\tactionInvocationId: string;\n\tactionId: ActionId;\n\ttenantId: string;\n\tspaceId: string;\n\tworkflowId: string;\n}\n\nexport interface DispatchActionResult {\n\tworkflowId: string;\n\trunId?: string;\n}\n\nexport interface PlatformActionDispatcher {\n\tdispatch(input: DispatchActionInput): Promise<DispatchActionResult>;\n}\n\n/**\n * One submission. `submitAction` reads the scalar fields (`actionId`, scope,\n * actor, correlation and causation ids, `executionReason`, `idempotencyKey`,\n * `authorizationBindingId`) exactly once, before its first await, and uses\n * only those values afterwards, so changing them while the call is pending\n * changes no action, scope, actor or key Host authorizes, persists or\n * executes. For an action that declares `admitSubmission`, `parameters`,\n * `provenance` and `authorizationBinding` are also read once there and\n * replaced by Host's own copies. For any other action Host uses those three\n * as the caller's objects, read where and as often as before (README,\n * \"Submission snapshot\").\n */\nexport interface SubmitActionInput {\n\tactionId: ActionId;\n\tparameters: Record<string, unknown>;\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n\tcorrelationId?: string;\n\tcausationId?: string;\n\tprovenance?: InvocationProvenance;\n\texecutionReason?: Extract<KnownActionExecutionReason, \"initial\" | \"offline_replay\">;\n\t/** Stable logical command key. Reusing it returns the original invocation; a pending failed dispatch may retry its stable workflow ID. */\n\tidempotencyKey?: string;\n\t/** Opaque, non-secret authorization/admission reference persisted with the invocation. */\n\tauthorizationBindingId?: string;\n\tauthorizationBinding?: AuthorizationBinding;\n}\n\nexport interface SubmitActionResult {\n\tactionInvocationId: string;\n\tstatus: ActionStatus;\n\tworkflowId: string;\n\trunId?: string;\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\treconciliation?: AuthorizationReconciliationOutcome;\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/** Present while the invocation waits for an external system to complete it. */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** Mirrors the action's declared consistency so a caller knows whether the result is settled. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n}\n\nexport interface ExecuteActionResult {\n\tactionInvocationId: string;\n\tstatus: ActionStatus;\n\tresult?: Record<string, unknown>;\n\terror?: string;\n\treconciliation?: AuthorizationReconciliationOutcome;\n\tadapterReconciliation?: AdapterReconciliationOutcome;\n\t/** Present while the invocation waits for an external system to complete it. */\n\tpendingCompletion?: PendingExternalCompletion;\n\t/** Mirrors the action's declared consistency so a caller knows whether the result is settled. */\n\tconsistency?: \"authoritative-now\" | \"provisional-until-reconciled\";\n\thitlRoute?: AgentActionRoute;\n\thitlRiskTier?: AgentActionRiskTier;\n}\n\nexport interface ExecuteInvocationOptions {\n\t/** Required when executing a row already protected by a worker or approval-resume lease. */\n\tleaseOwner?: string;\n\t/** Claim generation paired with leaseOwner; stale generations are rejected. */\n\tleaseToken?: number;\n}\n\nexport interface PlatformActionWorkerOptions<TDb> {\n\thost: GovernedActionHost;\n\tstore: RecoverablePlatformHostStore<TDb>;\n\tworkerId: string;\n\tbatchSize?: number;\n\tleaseDurationMs?: number;\n\tleaseRenewalIntervalMs?: number;\n\tpollIntervalMs?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tsignal?: AbortSignal;\n\tonError?: (error: unknown, invocation?: ActionInvocationRecord) => void;\n\ttelemetry?: PlatformHostTelemetry;\n\t/**\n\t * Sweep overdue external handoffs each cycle. Defaults to on. Turn it off\n\t * for a store without the governance seam, where the sweep would refuse\n\t * on every cycle, and run the sweep elsewhere.\n\t */\n\tsweepOverdueCompletions?: boolean;\n}\n\nexport interface PlatformActionWorkerCycleResult {\n\tclaimed: number;\n\tcompleted: number;\n\tfailed: number;\n\t/** Present when claimed agent work was durably parked instead of failing. */\n\twaitingForApproval?: number;\n}\n\nexport interface PlatformHostOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\tauthorization: PlatformHostAuthorization;\n\t/** Preferred explicit catalog assembled from this runtime's Fabric modules. */\n\tregistry?: Pick<ModuleRegistry<TDb>, \"resolveAction\" | \"resolvePolicy\" | \"resolveStateMachine\"> &\n\t\tPartial<Pick<ModuleRegistry<TDb>, \"orderedModules\">>;\n\t/** Resolve vertical- or runtime-local actions without mutating the process-wide registry. */\n\tresolveAction?: (actionId: ActionId) => ActionDefinition<TDb> | undefined;\n\tadapters?: readonly AdapterImplementation[];\n\t/**\n\t * Supplies the circuit breaker for each adapter call. Defaults to a new\n\t * `AdapterCircuitBreakerRegistry` per Host instance, which creates one\n\t * in-process breaker per `adapterType:operation` from that adapter's own\n\t * `circuitBreaker` config, on first use, and none for adapters without one.\n\t * Pass a shared registry or a custom provider to share breakers between\n\t * Host instances, receive breaker telemetry, or set manual overrides.\n\t */\n\tadapterCircuitBreakers?: AdapterCircuitBreakerProvider;\n\tdispatcher?: PlatformActionDispatcher;\n\tservices?: FabricRuntimeServices;\n\tidempotency?: {\n\t\tconflictMode?: \"audit-only\" | \"enforce\";\n\t\tonConflict?(conflict: IdempotencyConflict): void;\n\t\tonLegacyRecord?(invocation: ActionInvocationRecord): void;\n\t};\n\tprovenance?: {\n\t\tauditAttributeAllowlist?: readonly string[];\n\t\tmaxAttributes?: number;\n\t\tmaxValueLength?: number;\n\t\tredactAuditAttributes?(attributes: NamespacedAttributes): NamespacedAttributes;\n\t\tonTrace?(provenance: InvocationProvenance): void;\n\t};\n\t/** Requires an outbox-capable store; every canonical event is then appended with delivery state. */\n\toutbox?: {\n\t\tproducerModuleVersion(actionId: ActionId, actionVersion: number): string;\n\t\tclassifyPayload(event: AssetEventEnvelope): EventPayloadClassification;\n\t\tincludeProvenance?(event: AssetEventEnvelope, classification: EventPayloadClassification): boolean;\n\t\t/**\n\t\t * Opt an event's `actorId` and `actorType` into its outbox envelope. Absent, the actor is\n\t\t * excluded for every classification. Only `true` includes it. An included actor reaches every\n\t\t * sink of every relay reading this outbox.\n\t\t */\n\t\tincludeActor?(event: AssetEventEnvelope, classification: EventPayloadClassification): boolean;\n\t\ttraceContext?(event: AssetEventEnvelope): Record<string, string> | undefined;\n\t\t/** Host lifecycle events are excluded by default; opt in only after making their payload audit-safe. */\n\t\tshouldPublish?(event: AssetEventEnvelope): boolean;\n\t};\n\t/** Optional vertical-owned evaluator. When absent, agent behavior is unchanged. */\n\thitlEvaluator?: AgentActionPolicyEvaluator;\n\t/** Durable evaluator/ruleset version recorded with every HITL decision. */\n\thitlPolicyVersion?: string;\n\t/** Optional portable resolver; provider-specific implementations belong in integration packages. */\n\tresolveMutationGovernance?: MutationGovernanceResolver;\n\t/** Translate policy outcomes into durable, enforceable obligations. */\n\tresolvePolicyObligations?: (\n\t\toutcomes: readonly PolicyOutcome[],\n\t) => Promise<PolicyObligation[]> | PolicyObligation[];\n\t/** Translate a successful adapter result into audit-safe external execution evidence. */\n\textractExecutionAttestation?: (input: {\n\t\tactionInvocationId: string;\n\t\tadapterInvocationId: string;\n\t\tadapterType: string;\n\t\toperation: string;\n\t\tvendor: string;\n\t\t/** Audit-safe adapter input after redactAdapterInput has been applied. */\n\t\tinput: Record<string, unknown>;\n\t\tstartedAt: Date;\n\t\tcompletedAt: Date;\n\t\toutput: Record<string, unknown>;\n\t}) => Promise<ExecutionAttestation | undefined> | ExecutionAttestation | undefined;\n\t/** Package/provider/ruleset generations persisted with every newly created invocation. */\n\truntimeEvidence?: Partial<GovernanceRuntimeEvidence>;\n\t/**\n\t * Trusted composition identity attached by the Host configuration, never\n\t * accepted directly from submission input. Requires an explicit registry;\n\t * its module namespaces and versions are checked against these identities.\n\t */\n\tcomposition?: {\n\t\tassembly: AssemblyLockfile;\n\t\t/**\n\t\t * Receives a fresh object whose action, scope, actor, correlation,\n\t\t * causation, idempotency key, binding id and execution reason are the\n\t\t * ones Host read at submission and persists, whatever the caller\n\t\t * changed on its own object since. For an action without\n\t\t * `admitSubmission`, its `parameters`, `provenance` and\n\t\t * `authorizationBinding` read and assign the caller's input, as when\n\t\t * the callback was handed that input itself; for an action that\n\t\t * declares it, they are fresh copies of Host's snapshot.\n\t\t */\n\t\tresolveInitiatingReleaseDigest?(\n\t\t\tinput: SubmitActionInput,\n\t\t): Promise<string | undefined> | string | undefined;\n\t};\n\t/** Lease held while an approved invocation resumes; defaults to five minutes. */\n\tapprovalResumeLeaseDurationMs?: number;\n\t/**\n\t * Remove forbidden/sensitive fields before durable invocation persistence.\n\t * For an action without `admitSubmission`, receives the caller's\n\t * parameters object, before provenance normalization and the composition\n\t * callback, as before. For an action that declares it, receives Host's\n\t * copy, after the check admitted the submission.\n\t */\n\tredactActionParameters?: (\n\t\tactionId: ActionId,\n\t\tparameters: Record<string, unknown>,\n\t) => Record<string, unknown>;\n\t/**\n\t * The bound on an action's `admitSubmission` check. An answer that\n\t * settles this many milliseconds or more after the check was called,\n\t * measured on the monotonic clock when its promise settles, is refused as\n\t * `timed_out` and the check's signal is aborted. A whole number from 1 to\n\t * 2 147 483 647 (the timer maximum), or `createGovernedActionHost` throws;\n\t * default 10 000.\n\t */\n\tadmissionTimeoutMs?: number;\n\tresolvePolicies?: (input: ResolvePoliciesInput) => Promise<RuntimePolicyDefinition[]>;\n\textractEvents?: (data: Record<string, unknown>) => PendingAssetEvent[];\n\t/** Handler-result fields consumed by extractEvents and omitted from the durable result. */\n\teventResultFields?: readonly string[];\n\tredactAdapterInput?: (\n\t\tactionId: ActionId,\n\t\tadapterType: string,\n\t\toperation: string,\n\t\tinput: Record<string, unknown>,\n\t) => Record<string, unknown>;\n\tadapterEventSubject?: (\n\t\tactionId: ActionId,\n\t\tparameters: unknown,\n\t\thandlerResult: Record<string, unknown>,\n\t) => { subjectType: string; subjectId: string } | undefined;\n\tnow?: () => Date;\n\t/** Vendor-neutral lifecycle and metric sink. Telemetry is best effort. */\n\ttelemetry?: PlatformHostTelemetry;\n\t/**\n\t * Epoch-millis deadline delivered to every adapter execution context.\n\t * When omitted, no deadline is set and adapters receive no AbortSignal.\n\t */\n\tadapterDeadlineMs?: number;\n}\n\nexport interface GovernedActionHost {\n\tsubmitAction(input: SubmitActionInput): Promise<SubmitActionResult>;\n\texecuteInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\toptions?: ExecuteInvocationOptions,\n\t): Promise<ExecuteActionResult>;\n\tresumeApprovedInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: ActionApprovalDecision,\n\t): Promise<ExecuteActionResult>;\n\trecordExecutionAttestation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tattestation: ExecutionAttestation,\n\t): Promise<void>;\n\trecordExternalReconciliation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\treconciliation: ExternalReconciliation,\n\t): Promise<void>;\n\t/**\n\t * Complete an invocation an adapter handed off, by the reference the\n\t * external system was given. Idempotent for a repeated identical\n\t * completion; a contradictory one moves the invocation to reconciliation.\n\t */\n\tcompleteExternalInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcompletion: ExternalCompletion,\n\t): Promise<ExecuteActionResult>;\n\t/**\n\t * Move handoffs past their deadline to `reconciliation_required`, so a\n\t * callback that never comes is a finding and not a silent wait. The\n\t * pending handoff is kept, so a late completion can still land.\n\t */\n\treconcileOverdueCompletions(input?: ReconcileOverdueCompletionsInput): Promise<{ overdue: string[] }>;\n}\n\n/**\n * Host operator operations kept outside `GovernedActionHost`, so an existing\n * hand-written `GovernedActionHost` still satisfies that interface.\n * `createGovernedActionHost()` returns both.\n */\nexport interface OutboxRequeueHost {\n\t/**\n\t * Operator replay of a dead-lettered outbox record: authorize the trusted\n\t * actor for the tenant and space against the record as read, then move\n\t * that same dead letter back to pending with a fresh attempt budget and\n\t * append who, when, and why beside the earlier failure. The relay\n\t * republishes it under the same `eventId`. Requires an\n\t * `OutboxRequeuePlatformHostStore`; refusals are returned, not thrown.\n\t */\n\trequeueOutboxDeadLetter(input: RequeueOutboxDeadLetterInput): Promise<RequeueOutboxDeadLetterResult>;\n}\n","import { createHash } from \"node:crypto\";\nimport { canonicalJson } from \"@fabricorg/platform\";\nimport type { InvocationProvenance, InvocationSource, PlatformHostOptions } from \"./types\";\n\nexport const PARAMETER_DIGEST_ALGORITHM = \"fabric-canonical-json-sha256-v1\" as const;\n\n// Canonical JSON is owned by @fabricorg/platform (evidence subpath); Host re-exports it unchanged so\n// its public API and parameter digests stay byte-identical.\nexport { canonicalJson };\n\nexport function digestParameters(parameters: unknown): string {\n\treturn createHash(\"sha256\").update(canonicalJson(parameters)).digest(\"hex\");\n}\n\nconst ATTRIBUTE_NAME = /^[a-z][a-z0-9-]*(?:\\.[A-Za-z][A-Za-z0-9_-]*)+$/;\nconst INVOCATION_SOURCE = /^(?:ui|sdui|api|agent|worker|system|[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+)$/;\n\nexport function normalizeProvenance(\n\tinput: InvocationProvenance | undefined,\n\toptions: PlatformHostOptions<unknown>[\"provenance\"],\n): Omit<InvocationProvenance, \"traceAttributes\"> | undefined {\n\tif (!input) return undefined;\n\tif (!INVOCATION_SOURCE.test(input.source)) throw new Error(`Invalid invocation provenance source: ${input.source}`);\n\tconst maxAttributes = options?.maxAttributes ?? 16;\n\tconst maxValueLength = options?.maxValueLength ?? 256;\n\tconst allowlist = new Set(options?.auditAttributeAllowlist ?? []);\n\tconst validate = (attributes: Record<string, string> | undefined, durable: boolean) => {\n\t\tif (!attributes) return undefined;\n\t\tconst entries = Object.entries(attributes);\n\t\tif (entries.length > maxAttributes) throw new Error(`Invocation provenance exceeds ${maxAttributes} attributes.`);\n\t\tfor (const [key, value] of entries) {\n\t\t\tif (!ATTRIBUTE_NAME.test(key)) throw new Error(`Invalid provenance attribute name: ${key}`);\n\t\t\tif (value.length > maxValueLength) throw new Error(`Invocation provenance attribute \"${key}\" exceeds ${maxValueLength} characters.`);\n\t\t\tif (durable && !allowlist.has(key)) throw new Error(`Audit provenance attribute \"${key}\" is not allowlisted.`);\n\t\t}\n\t\treturn Object.fromEntries(entries);\n\t};\n\tvalidate(input.traceAttributes, false);\n\tconst redactedAuditAttributes = input.auditAttributes\n\t\t? options?.redactAuditAttributes?.({ ...input.auditAttributes }) ?? input.auditAttributes\n\t\t: undefined;\n\tconst auditAttributes = validate(redactedAuditAttributes, true);\n\toptions?.onTrace?.({\n\t\t...input,\n\t\t...(auditAttributes ? { auditAttributes } : { auditAttributes: undefined }),\n\t});\n\treturn {\n\t\tsource: input.source,\n\t\tcorrelationId: input.correlationId,\n\t\t...(input.causationId ? { causationId: input.causationId } : {}),\n\t\t...(auditAttributes ? { auditAttributes } : {}),\n\t};\n}\n","import type {\n\tActionInvocationRecord,\n\tOutboxPlatformHostStore,\n\tPlatformHostStore,\n\tRecoverablePlatformHostStore,\n} from \"./types\";\n\n/** Version of the vendor-neutral health/readiness contract. */\nexport const PLATFORM_HOST_HEALTH_CONTRACT_VERSION = 1 as const;\n\n/**\n * Stable metric names. Adapters may translate these names to a vendor's\n * naming convention, but applications should not derive names from labels.\n */\nexport const PLATFORM_HOST_METRIC_NAMES = {\n\tworkerCyclesStarted: \"fabric.platform.worker.cycles.started\",\n\tworkerCyclesCompleted: \"fabric.platform.worker.cycles.completed\",\n\tworkerCyclesFailed: \"fabric.platform.worker.cycles.failed\",\n\tinvocationSubmitted: \"fabric.platform.invocation.submitted\",\n\tinvocationAdmissionRefused: \"fabric.platform.invocation.admission_refused\",\n\tinvocationExecutionStarted: \"fabric.platform.invocation.execution_started\",\n\tinvocationLeaseClaimed: \"fabric.platform.invocation.lease_claimed\",\n\tinvocationCompleted: \"fabric.platform.invocation.completed\",\n\tinvocationFailed: \"fabric.platform.invocation.failed\",\n\tinvocationPolicyBlocked: \"fabric.platform.invocation.policy_blocked\",\n\tinvocationValidationFailed: \"fabric.platform.invocation.validation_failed\",\n\tinvocationApprovalWaited: \"fabric.platform.invocation.approval_waited\",\n\tinvocationReconciliationRequired: \"fabric.platform.invocation.reconciliation_required\",\n\toutboxRelayCyclesStarted: \"fabric.platform.outbox.relay_cycles.started\",\n\toutboxRelayCyclesCompleted: \"fabric.platform.outbox.relay_cycles.completed\",\n\toutboxRelayCyclesFailed: \"fabric.platform.outbox.relay_cycles.failed\",\n\toutboxLeaseClaimed: \"fabric.platform.outbox.lease_claimed\",\n\toutboxPublished: \"fabric.platform.outbox.published\",\n\toutboxFailed: \"fabric.platform.outbox.failed\",\n\toutboxDeadLettered: \"fabric.platform.outbox.dead_lettered\",\n\toutboxRequeued: \"fabric.platform.outbox.requeued\",\n\toutboxRequeueRefused: \"fabric.platform.outbox.requeue_refused\",\n\tinvocationBacklog: \"fabric.platform.invocation.backlog\",\n\tinvocationRunning: \"fabric.platform.invocation.running\",\n\tinvocationExpiredLeases: \"fabric.platform.invocation.expired_leases\",\n\tinvocationApprovalWaits: \"fabric.platform.invocation.approval_waits\",\n\tinvocationReconciliationRequiredGauge: \"fabric.platform.invocation.reconciliation_required.count\",\n\toutboxBacklog: \"fabric.platform.outbox.backlog\",\n\toutboxExpiredLeases: \"fabric.platform.outbox.expired_leases\",\n\toutboxDeadLetters: \"fabric.platform.outbox.dead_letters\",\n} as const;\n\nexport type PlatformHostMetricName =\n\t(typeof PLATFORM_HOST_METRIC_NAMES)[keyof typeof PLATFORM_HOST_METRIC_NAMES];\n\nexport type PlatformHostTelemetryEventName =\n\t| \"worker.cycle.started\"\n\t| \"worker.cycle.completed\"\n\t| \"worker.cycle.failed\"\n\t| \"invocation.submitted\"\n\t| \"invocation.admission_refused\"\n\t| \"invocation.execution_started\"\n\t| \"invocation.lease_claimed\"\n\t| \"invocation.completed\"\n\t| \"invocation.failed\"\n\t| \"invocation.policy_blocked\"\n\t| \"invocation.validation_failed\"\n\t| \"invocation.approval_waited\"\n\t| \"invocation.reconciliation_required\"\n\t| \"outbox.relay.started\"\n\t| \"outbox.relay.completed\"\n\t| \"outbox.relay.failed\"\n\t| \"outbox.lease_claimed\"\n\t| \"outbox.published\"\n\t| \"outbox.failed\"\n\t| \"outbox.dead_lettered\"\n\t| \"outbox.requeued\"\n\t| \"outbox.requeue_refused\";\n\nexport type PlatformHostMetricType = \"counter\" | \"gauge\";\nexport type PlatformHostTelemetryAttribute = string | number | boolean;\n\nexport interface PlatformHostLifecycleTelemetry {\n\tkind: \"event\";\n\tname: PlatformHostTelemetryEventName;\n\tmetricName: PlatformHostMetricName;\n\tmetricType: \"counter\";\n\toccurredAt: Date;\n\ttenantId?: string;\n\tspaceId?: string;\n\tattributes?: Readonly<Record<string, PlatformHostTelemetryAttribute>>;\n}\n\nexport interface PlatformHostMetricTelemetry {\n\tkind: \"metric\";\n\tname: PlatformHostMetricName;\n\tmetricType: PlatformHostMetricType;\n\tvalue: number;\n\tobservedAt: Date;\n\ttenantId?: string;\n\tspaceId?: string;\n}\n\nexport type PlatformHostTelemetryRecord =\n\t| PlatformHostLifecycleTelemetry\n\t| PlatformHostMetricTelemetry;\n\nexport type PlatformHostTelemetryHook = (\n\trecord: PlatformHostTelemetryRecord,\n) => void | Promise<void>;\n\n/**\n * A deliberately small sink contract. No OpenTelemetry, Prometheus, or\n * vendor SDK is required by Platform Host.\n */\nexport type PlatformHostTelemetry =\n\t| PlatformHostTelemetryHook\n\t| { record: PlatformHostTelemetryHook };\n\nexport type PlatformHostTelemetryInput =\n\t| Omit<PlatformHostLifecycleTelemetry, \"occurredAt\" | \"metricType\"> & { occurredAt?: Date }\n\t| Omit<PlatformHostMetricTelemetry, \"observedAt\"> & { observedAt?: Date };\n\n/**\n * Telemetry is best effort and must never change governed mutation behavior.\n * Promise-returning hooks are detached and rejected hooks are swallowed.\n */\nexport function emitPlatformHostTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tinput: PlatformHostTelemetryInput,\n): void {\n\tif (!telemetry) return;\n\tconst record = input.kind === \"event\"\n\t\t? { ...input, metricType: \"counter\" as const, occurredAt: input.occurredAt ?? new Date() }\n\t\t: { ...input, observedAt: input.observedAt ?? new Date() };\n\ttry {\n\t\tconst result = typeof telemetry === \"function\"\n\t\t\t? telemetry(record)\n\t\t\t: telemetry.record(record);\n\t\tif (isPromiseLike(result)) void result.catch(() => undefined);\n\t} catch {\n\t\t// Observability outages must not fail a mutation or worker checkpoint.\n\t}\n}\n\nexport interface PlatformHostHealthQuery {\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow: Date;\n}\n\nexport interface PlatformHostHealthCounts {\n\tinvocationBacklog: number;\n\tinvocationRunning: number;\n\tinvocationExpiredLeases: number;\n\tinvocationApprovalWaits: number;\n\tinvocationReconciliationRequired: number;\n\toutboxBacklog: number;\n\toutboxExpiredLeases: number;\n\toutboxDeadLetters: number;\n}\n\nexport interface PlatformHostWorkerHealthInput {\n\tlastHeartbeatAt: Date;\n\tstaleAfterMs: number;\n}\n\nexport interface PlatformHostHealthOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\ttenantId?: string;\n\tspaceId?: string;\n\tnow?: () => Date;\n\t/**\n\t * Worker liveness is supplied by the deployment's supervisor or telemetry\n\t * bridge. Only aggregate healthy/stale counts are returned.\n\t */\n\tworkers?: readonly PlatformHostWorkerHealthInput[];\n\ttelemetry?: PlatformHostTelemetry;\n}\n\nexport interface PlatformHostHealthStore<TDb> extends RecoverablePlatformHostStore<TDb> {\n\tgetHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts>;\n}\n\nexport type PlatformHostHealthStatus = \"healthy\" | \"degraded\" | \"unhealthy\";\n\nexport interface PlatformHostHealthSnapshot {\n\tcontractVersion: typeof PLATFORM_HOST_HEALTH_CONTRACT_VERSION;\n\tgeneratedAt: Date;\n\tscope: { tenantId?: string; spaceId?: string };\n\tdataAvailable: boolean;\n\tstatus: PlatformHostHealthStatus;\n\treadiness: {\n\t\tready: boolean;\n\t\treasonCodes: readonly PlatformHostReadinessReason[];\n\t};\n\tworkers: {\n\t\treported: number;\n\t\thealthy: number;\n\t\tstale: number;\n\t};\n\tinvocations: {\n\t\tbacklog: number;\n\t\trunning: number;\n\t\texpiredLeases: number;\n\t\tapprovalWaits: number;\n\t\treconciliationRequired: number;\n\t};\n\toutbox: {\n\t\tbacklog: number;\n\t\texpiredLeases: number;\n\t\tdeadLetters: number;\n\t};\n}\n\nexport type PlatformHostReadinessReason =\n\t| \"health_source_unavailable\"\n\t| \"workers_stale\"\n\t| \"invocation_expired_leases\"\n\t| \"outbox_expired_leases\"\n\t| \"outbox_dead_letters\"\n\t| \"reconciliation_required\";\n\n/**\n * Read tenant/space-scoped operational counts without returning invocation,\n * actor, parameter, error, event, or adapter data.\n */\nexport async function getPlatformHostHealthSnapshot<TDb>(\n\toptions: PlatformHostHealthOptions<TDb>,\n): Promise<PlatformHostHealthSnapshot> {\n\tconst generatedAt = options.now?.() ?? new Date();\n\tconst workerSummary = summarizeWorkers(options.workers ?? [], generatedAt);\n\tconst scope = {\n\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t};\n\n\ttry {\n\t\tconst counts = await readHealthCounts(options.store, {\n\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t\tnow: generatedAt,\n\t\t});\n\t\tconst snapshot = createHealthSnapshot(\n\t\t\tgeneratedAt,\n\t\t\tscope,\n\t\t\tcounts,\n\t\t\tworkerSummary,\n\t\t\ttrue,\n\t\t);\n\t\temitHealthMetrics(options.telemetry, snapshot);\n\t\treturn snapshot;\n\t} catch {\n\t\tconst snapshot = createHealthSnapshot(\n\t\t\tgeneratedAt,\n\t\t\tscope,\n\t\t\tzeroHealthCounts(),\n\t\t\tworkerSummary,\n\t\t\tfalse,\n\t\t);\n\t\temitHealthMetrics(options.telemetry, snapshot);\n\t\treturn snapshot;\n\t}\n}\n\nasync function readHealthCounts<TDb>(\n\tstore: PlatformHostStore<TDb>,\n\tquery: PlatformHostHealthQuery,\n): Promise<PlatformHostHealthCounts> {\n\tconst candidate = store as PlatformHostStore<TDb> & {\n\t\tgetHealthCounts?: (input: PlatformHostHealthQuery) => Promise<PlatformHostHealthCounts>;\n\t};\n\tif (typeof candidate.getHealthCounts === \"function\") {\n\t\treturn assertHealthCounts(await candidate.getHealthCounts(query));\n\t}\n\n\t// Compatibility fallback for custom stores that predate the aggregate seam.\n\tconst recoverable = store as Partial<RecoverablePlatformHostStore<TDb>>;\n\tconst outbox = store as Partial<OutboxPlatformHostStore<TDb>>;\n\tif (typeof recoverable.listActionInvocations !== \"function\") {\n\t\tthrow new Error(\"Health counts are not supported by this store.\");\n\t}\n\tconst invocations = await recoverable.listActionInvocations({\n\t\t...(query.tenantId ? { tenantId: query.tenantId } : {}),\n\t\t...(query.spaceId ? { spaceId: query.spaceId } : {}),\n\t\tlimit: Number.MAX_SAFE_INTEGER,\n\t});\n\tconst outboxRecords = typeof outbox.listOutbox === \"function\"\n\t\t? await outbox.listOutbox({\n\t\t\t...(query.tenantId ? { tenantId: query.tenantId } : {}),\n\t\t\t...(query.spaceId ? { spaceId: query.spaceId } : {}),\n\t\t})\n\t\t: [];\n\treturn countsFromRecords(invocations, outboxRecords, query.now);\n}\n\nfunction countsFromRecords(\n\tinvocations: readonly ActionInvocationRecord[],\n\toutbox: readonly { status: string; leaseExpiresAt?: Date }[],\n\tnow: Date,\n): PlatformHostHealthCounts {\n\treturn {\n\t\tinvocationBacklog: invocations.filter((item) => item.status === \"pending\").length,\n\t\tinvocationRunning: invocations.filter((item) => item.status === \"running\").length,\n\t\tinvocationExpiredLeases: invocations.filter((item) =>\n\t\t\titem.status === \"running\" &&\n\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\titem.leaseExpiresAt.getTime() <= now.getTime(),\n\t\t).length,\n\t\tinvocationApprovalWaits: invocations.filter((item) => item.status === \"waiting_for_approval\").length,\n\t\tinvocationReconciliationRequired: invocations.filter((item) => item.status === \"reconciliation_required\").length,\n\t\toutboxBacklog: outbox.filter((item) => item.status === \"pending\").length,\n\t\toutboxExpiredLeases: outbox.filter((item) =>\n\t\t\titem.status === \"pending\" &&\n\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\titem.leaseExpiresAt.getTime() <= now.getTime(),\n\t\t).length,\n\t\toutboxDeadLetters: outbox.filter((item) => item.status === \"dead_letter\").length,\n\t};\n}\n\nfunction assertHealthCounts(value: PlatformHostHealthCounts): PlatformHostHealthCounts {\n\tfor (const [name, count] of Object.entries(value)) {\n\t\tif (!Number.isSafeInteger(count) || count < 0) {\n\t\t\tthrow new Error(`Invalid health count: ${name}`);\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction zeroHealthCounts(): PlatformHostHealthCounts {\n\treturn {\n\t\tinvocationBacklog: 0,\n\t\tinvocationRunning: 0,\n\t\tinvocationExpiredLeases: 0,\n\t\tinvocationApprovalWaits: 0,\n\t\tinvocationReconciliationRequired: 0,\n\t\toutboxBacklog: 0,\n\t\toutboxExpiredLeases: 0,\n\t\toutboxDeadLetters: 0,\n\t};\n}\n\nfunction summarizeWorkers(\n\tworkers: readonly PlatformHostWorkerHealthInput[],\n\tnow: Date,\n): PlatformHostHealthSnapshot[\"workers\"] {\n\tlet healthy = 0;\n\tlet stale = 0;\n\tfor (const worker of workers) {\n\t\tif (\n\t\t\tNumber.isFinite(worker.staleAfterMs) &&\n\t\t\tworker.staleAfterMs >= 0 &&\n\t\t\tworker.lastHeartbeatAt.getTime() + worker.staleAfterMs >= now.getTime()\n\t\t) healthy += 1;\n\t\telse stale += 1;\n\t}\n\treturn { reported: workers.length, healthy, stale };\n}\n\nfunction createHealthSnapshot(\n\tgeneratedAt: Date,\n\tscope: PlatformHostHealthSnapshot[\"scope\"],\n\tcounts: PlatformHostHealthCounts,\n\tworkers: PlatformHostHealthSnapshot[\"workers\"],\n\tdataAvailable: boolean,\n): PlatformHostHealthSnapshot {\n\tconst reasonCodes: PlatformHostReadinessReason[] = [];\n\tif (!dataAvailable) reasonCodes.push(\"health_source_unavailable\");\n\tif (workers.stale > 0) reasonCodes.push(\"workers_stale\");\n\tif (counts.invocationExpiredLeases > 0) reasonCodes.push(\"invocation_expired_leases\");\n\tif (counts.outboxExpiredLeases > 0) reasonCodes.push(\"outbox_expired_leases\");\n\tif (counts.outboxDeadLetters > 0) reasonCodes.push(\"outbox_dead_letters\");\n\tif (counts.invocationReconciliationRequired > 0) reasonCodes.push(\"reconciliation_required\");\n\tconst unhealthy = !dataAvailable;\n\tconst degraded = unhealthy || reasonCodes.length > 0;\n\treturn {\n\t\tcontractVersion: PLATFORM_HOST_HEALTH_CONTRACT_VERSION,\n\t\tgeneratedAt,\n\t\tscope,\n\t\tdataAvailable,\n\t\tstatus: unhealthy ? \"unhealthy\" : degraded ? \"degraded\" : \"healthy\",\n\t\treadiness: {\n\t\t\tready: dataAvailable && workers.stale === 0,\n\t\t\treasonCodes,\n\t\t},\n\t\tworkers,\n\t\tinvocations: {\n\t\t\tbacklog: counts.invocationBacklog,\n\t\t\trunning: counts.invocationRunning,\n\t\t\texpiredLeases: counts.invocationExpiredLeases,\n\t\t\tapprovalWaits: counts.invocationApprovalWaits,\n\t\t\treconciliationRequired: counts.invocationReconciliationRequired,\n\t\t},\n\t\toutbox: {\n\t\t\tbacklog: counts.outboxBacklog,\n\t\t\texpiredLeases: counts.outboxExpiredLeases,\n\t\t\tdeadLetters: counts.outboxDeadLetters,\n\t\t},\n\t};\n}\n\nfunction emitHealthMetrics(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tsnapshot: PlatformHostHealthSnapshot,\n): void {\n\tconst scope = {\n\t\t...(snapshot.scope.tenantId ? { tenantId: snapshot.scope.tenantId } : {}),\n\t\t...(snapshot.scope.spaceId ? { spaceId: snapshot.scope.spaceId } : {}),\n\t};\n\tconst metrics: Array<[PlatformHostMetricName, number]> = [\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationBacklog, snapshot.invocations.backlog],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationRunning, snapshot.invocations.running],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationExpiredLeases, snapshot.invocations.expiredLeases],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationApprovalWaits, snapshot.invocations.approvalWaits],\n\t\t[PLATFORM_HOST_METRIC_NAMES.invocationReconciliationRequiredGauge, snapshot.invocations.reconciliationRequired],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxBacklog, snapshot.outbox.backlog],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxExpiredLeases, snapshot.outbox.expiredLeases],\n\t\t[PLATFORM_HOST_METRIC_NAMES.outboxDeadLetters, snapshot.outbox.deadLetters],\n\t];\n\tfor (const [name, value] of metrics) {\n\t\temitPlatformHostTelemetry(telemetry, {\n\t\t\tkind: \"metric\",\n\t\t\tname,\n\t\t\tmetricType: \"gauge\",\n\t\t\tvalue,\n\t\t\t...scope,\n\t\t\tobservedAt: snapshot.generatedAt,\n\t\t});\n\t}\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<void> {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\t\"then\" in value &&\n\t\ttypeof (value as { then?: unknown }).then === \"function\",\n\t);\n}\n","import type {\n\tActionId,\n\tActionStatus,\n} from \"@fabricorg/platform\";\nimport type {\n\tAtomicMutationPlatformHostStore,\n\tGovernancePlatformHostStore,\n\tPlatformHostOptions,\n} from \"./types\";\nimport { emitPlatformHostTelemetry, PLATFORM_HOST_METRIC_NAMES } from \"./observability\";\n\n// Helpers the host and its lifecycle modules share. Nothing here is public.\n\nexport function asAtomicMutationStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): AtomicMutationPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<AtomicMutationPlatformHostStore<TDb>>;\n\treturn typeof candidate.transactionWithEvents === \"function\"\n\t\t? (store as AtomicMutationPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nexport function asGovernanceStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): GovernancePlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<GovernancePlatformHostStore<TDb>>;\n\treturn typeof candidate.recordMutationGovernance === \"function\" &&\n\t\ttypeof candidate.appendPolicyObligations === \"function\" &&\n\t\ttypeof candidate.appendExecutionAttestation === \"function\"\n\t\t? (store as GovernancePlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nexport function withoutPrivateHostFields(\n\tdata: Record<string, unknown>,\n\teventResultFields: readonly string[],\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(data).filter(([key]) => !eventResultFields.includes(key)),\n\t);\n}\n\nexport function errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function lifecycleId(prefix: string, invocationId: string, key: string): string {\n\tconst safeKey = key.replace(/[^a-zA-Z0-9_-]/g, \"_\").slice(0, 96);\n\treturn `${prefix}_${invocationId}_${safeKey}`;\n}\n\nexport function emitInvocationStatusTelemetry(\n\tinvocation: {\n\t\tid: string;\n\t\ttenantId: string;\n\t\tspaceId: string;\n\t\tactionId?: ActionId;\n\t\tactionVersion?: number;\n\t},\n\tstatus: ActionStatus | undefined,\n\ttelemetry: PlatformHostOptions<unknown>[\"telemetry\"],\n\toccurredAt: Date,\n\tpreviousStatus?: ActionStatus,\n): void {\n\tif (!status) return;\n\tconst event = status === \"completed\"\n\t\t? { name: \"invocation.completed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationCompleted }\n\t\t: status === \"blocked_by_policy\"\n\t\t\t? { name: \"invocation.policy_blocked\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationPolicyBlocked }\n\t\t\t: status === \"validation_failed\"\n\t\t\t\t? { name: \"invocation.validation_failed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationValidationFailed }\n\t\t\t\t: status === \"waiting_for_approval\"\n\t\t\t\t\t? { name: \"invocation.approval_waited\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationApprovalWaited }\n\t\t\t\t\t: status === \"reconciliation_required\"\n\t\t\t\t\t\t? { name: \"invocation.reconciliation_required\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationReconciliationRequired }\n\t\t\t\t\t\t: status === \"failed\"\n\t\t\t\t\t\t\t? { name: \"invocation.failed\" as const, metricName: PLATFORM_HOST_METRIC_NAMES.invocationFailed }\n\t\t\t\t\t\t\t: undefined;\n\tif (!event) return;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname: event.name,\n\t\tmetricName: event.metricName,\n\t\toccurredAt,\n\t\ttenantId: invocation.tenantId,\n\t\tspaceId: invocation.spaceId,\n\t\tattributes: {\n\t\t\t...(invocation.actionId ? { actionId: invocation.actionId } : {}),\n\t\t\t...(invocation.actionVersion !== undefined ? { actionVersion: invocation.actionVersion } : {}),\n\t\t\t...(previousStatus ? { fromStatus: previousStatus } : {}),\n\t\t},\n\t});\n}\n","import { createHash } from \"node:crypto\";\nimport type { ActionDefinition, ActionId } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationPatch,\n\tActionInvocationRecord,\n\tExecuteActionResult,\n\tExternalCompletion,\n\tPendingAssetEvent,\n\tPlatformHostMutationTransaction,\n\tPlatformHostOptions,\n\tRecordedExternalCompletion,\n\tRecoverablePlatformHostStore,\n\tReconcileOverdueCompletionsInput,\n} from \"./types\";\nimport { ExternalCompletionError } from \"./types\";\nimport { canonicalJson } from \"./command-identity\";\nimport {\n\tasAtomicMutationStore,\n\tasGovernanceStore,\n\temitInvocationStatusTelemetry,\n\tlifecycleId,\n\twithoutPrivateHostFields,\n} from \"./host-internals\";\n\n// ── External completion lifecycle ───────────────────────────────────────────\n//\n// An adapter hands work to an external system that finishes it later and\n// calls back. This module owns everything after the handoff is recorded:\n// settling the invocation by reference, absorbing repeats, catching\n// contradictions, surfacing overdue handoffs. The host's adapter loop owns\n// the handoff itself, since that happens mid-execution. What is shared with\n// the host is passed in, so the host stays the only thing that writes\n// invocations through a lease.\n\nexport interface ExternalCompletionDeps<TDb> {\n\tstore: PlatformHostOptions<TDb>[\"store\"];\n\ttelemetry: PlatformHostOptions<TDb>[\"telemetry\"];\n\teventResultFields: readonly string[];\n\tnow(): Date;\n\tactionResolver(actionId: ActionId): ActionDefinition<TDb> | undefined;\n\tappendEvent(\n\t\tinvocation: ActionInvocationRecord,\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion?: number,\n\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t): Promise<void>;\n\tpersistInvocation(invocation: ActionInvocationRecord, patch: ActionInvocationPatch): Promise<void>;\n\tactionResult(invocation: ActionInvocationRecord): ExecuteActionResult;\n\twithConsistency<TResult extends { actionInvocationId: string }>(result: TResult, actionId: ActionId): TResult;\n}\n\nexport interface ExternalCompletionLifecycle {\n\tcompleteExternalInvocation(actionInvocationId: string, tenantId: string, spaceId: string, completion: ExternalCompletion): Promise<ExecuteActionResult>;\n\treconcileOverdueCompletions(input?: ReconcileOverdueCompletionsInput): Promise<{ overdue: string[] }>;\n\trecordCompletionReconciliation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tcompletion: Pick<ExternalCompletion, \"externalReference\" | \"evidenceReferences\"> & { provider?: string; kind?: string },\n\t\treason: string,\n\t): Promise<void>;\n}\n\nexport function createExternalCompletionLifecycle<TDb>(deps: ExternalCompletionDeps<TDb>): ExternalCompletionLifecycle {\n\tconst { now, actionResolver, appendEvent, persistInvocation, actionResult, withConsistency, eventResultFields } = deps;\n\n\tasync function completeExternalInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcompletion: ExternalCompletion,\n\t): Promise<ExecuteActionResult> {\n\t\tif (typeof completion.externalReference !== \"string\" || completion.externalReference.trim() === \"\") {\n\t\t\tthrow new ExternalCompletionError(\"invalid_completion\", \"External completion must name the external reference it completes.\");\n\t\t}\n\t\tif (completion.outcome !== \"completed\" && completion.outcome !== \"failed\") {\n\t\t\tthrow new ExternalCompletionError(\"invalid_completion\", `External completion outcome must be \"completed\" or \"failed\", received \"${String(completion.outcome)}\".`);\n\t\t}\n\t\t// Read, decide, and write under one lock where the store can give one,\n\t\t// so two callbacks racing cannot both read \"nothing recorded yet\" and\n\t\t// both write. A base store without transactions keeps the narrower\n\t\t// read-then-write window; that is a property of the store, not of this\n\t\t// path, and the contract documents it.\n\t\tconst atomicStore = asAtomicMutationStore(deps.store);\n\t\tif (atomicStore) {\n\t\t\treturn atomicStore.transactionWithEvents(async (transaction) => {\n\t\t\t\tconst read = transaction.getActionInvocationForUpdate\n\t\t\t\t\t? await transaction.getActionInvocationForUpdate(actionInvocationId, tenantId, spaceId)\n\t\t\t\t\t: await deps.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\t\t\treturn settleExternalCompletion(read, actionInvocationId, completion, {\n\t\t\t\t\tupdate: (patch) => transaction.updateActionInvocation(actionInvocationId, tenantId, spaceId, patch),\n\t\t\t\t\ttransaction,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tconst read = await deps.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\treturn settleExternalCompletion(read, actionInvocationId, completion, {\n\t\t\tupdate: (patch) => deps.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, patch),\n\t\t});\n\t}\n\n\tasync function settleExternalCompletion(\n\t\tinvocation: ActionInvocationRecord | undefined,\n\t\tactionInvocationId: string,\n\t\tcompletion: ExternalCompletion,\n\t\twriter: {\n\t\t\tupdate: (patch: ActionInvocationPatch) => Promise<void>;\n\t\t\ttransaction?: PlatformHostMutationTransaction<TDb>;\n\t\t},\n\t): Promise<ExecuteActionResult> {\n\t\tif (!invocation) throw new ExternalCompletionError(\"not_found\", `ActionInvocation not found: ${actionInvocationId}`);\n\t\tconst recorded = invocation.externalCompletion;\n\t\tconst stillExecuting = !recorded && (\n\t\t\tinvocation.status === \"pending\"\n\t\t\t|| (invocation.status === \"running\" && (invocation.leaseOwner !== undefined || invocation.pendingCompletion?.parkedAt === undefined))\n\t\t);\n\t\tif (stillExecuting) {\n\t\t\t// The invocation has not parked: it is dispatched and not yet run, a\n\t\t\t// worker still holds it, or an inline execution recorded the handoff\n\t\t\t// and is still running the steps after it. Settling now would report\n\t\t\t// completed while effects are still being applied, and finalization\n\t\t\t// would then overwrite the verdict. The handoff is recorded before\n\t\t\t// the steps after it run, so \"not awaiting\" here means \"not yet\".\n\t\t\t// Callbacks arrive at least once; this one is asked to come back.\n\t\t\tthrow new ExternalCompletionError(\"still_executing\", `ActionInvocation ${actionInvocationId} is still executing; retry the completion after it parks.`);\n\t\t}\n\t\tif (recorded) {\n\t\t\tif (recorded.externalReference !== completion.externalReference) {\n\t\t\t\tthrow new ExternalCompletionError(\"reference_mismatch\", `ActionInvocation ${actionInvocationId} was completed by \"${recorded.externalReference}\", not \"${completion.externalReference}\".`);\n\t\t\t}\n\t\t\tif (completion.provider !== undefined && recorded.provider !== undefined && completion.provider !== recorded.provider) {\n\t\t\t\tthrow new ExternalCompletionError(\"provider_mismatch\", `ActionInvocation ${actionInvocationId} was completed by \"${recorded.provider}\", not \"${completion.provider}\".`);\n\t\t\t}\n\t\t\tconst incomingDigest = completionDigest(completion, recorded.provider ?? completion.provider);\n\t\t\tif (recorded.digest === incomingDigest) {\n\t\t\t\t// The same news twice. Callbacks are at-least-once; this is the once.\n\t\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t\t}\n\t\t\t// The external system contradicted itself, by flipping the outcome or\n\t\t\t// by reporting the same outcome with different evidence. Neither\n\t\t\t// answer can be trusted over the other, so the first stays on\n\t\t\t// record, the second goes to the reconciliation log, and consumers\n\t\t\t// hear about it.\n\t\t\tconst message = recorded.outcome === completion.outcome\n\t\t\t\t? `External operation \"${completion.externalReference}\" reported ${completion.outcome} again with different evidence.`\n\t\t\t\t: `External operation \"${completion.externalReference}\" reported ${completion.outcome} after reporting ${recorded.outcome}.`;\n\t\t\tawait recordCompletionReconciliation(invocation, { ...completion, kind: `contradicted:${incomingDigest.slice(0, 16)}` }, message);\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ExternalOperationContradicted\",\n\t\t\t\tsubjectType: \"AdapterInvocation\",\n\t\t\t\tsubjectId: invocation.pendingCompletion?.adapterInvocationId ?? actionInvocationId,\n\t\t\t\tpayload: { externalReference: completion.externalReference, recorded: recorded.outcome, reported: completion.outcome },\n\t\t\t}, `external:${completion.externalReference}:contradicted:${completion.outcome}`, 1, writer.transaction);\n\t\t\tawait writer.update({ status: \"reconciliation_required\", error: message });\n\t\t\temitInvocationStatusTelemetry(invocation, \"reconciliation_required\", deps.telemetry, now(), invocation.status);\n\t\t\treturn withConsistency(actionResult({ ...invocation, status: \"reconciliation_required\", error: message }), invocation.actionId);\n\t\t}\n\t\tconst pending = invocation.pendingCompletion;\n\t\tif (!pending) {\n\t\t\tconst action = actionResolver(invocation.actionId);\n\t\t\tif ((action?.execution?.completion ?? \"immediate\") === \"immediate\") {\n\t\t\t\tthrow new ExternalCompletionError(\"immediate_contract\", `Action ${invocation.actionId} declares immediate completion; nothing external completes it.`);\n\t\t\t}\n\t\t\tthrow new ExternalCompletionError(\"not_awaiting\", `ActionInvocation ${actionInvocationId} is not awaiting an external completion.`);\n\t\t}\n\t\tif (pending.externalReference !== completion.externalReference) {\n\t\t\tthrow new ExternalCompletionError(\"reference_mismatch\", `ActionInvocation ${actionInvocationId} awaits \"${pending.externalReference}\", not \"${completion.externalReference}\".`);\n\t\t}\n\t\tif (completion.provider !== undefined && completion.provider !== pending.provider) {\n\t\t\tthrow new ExternalCompletionError(\"provider_mismatch\", `ActionInvocation ${actionInvocationId} awaits completion from \"${pending.provider}\", not \"${completion.provider}\".`);\n\t\t}\n\t\tconst recordedAt = now();\n\t\tconst externalCompletion: RecordedExternalCompletion = {\n\t\t\t...completion,\n\t\t\tprovider: completion.provider ?? pending.provider,\n\t\t\tobservedAt: completion.observedAt instanceof Date ? completion.observedAt.toISOString() : completion.observedAt,\n\t\t\trecordedAt,\n\t\t\tdigest: completionDigest(completion, completion.provider ?? pending.provider),\n\t\t};\n\t\tconst subject = { subjectType: \"AdapterInvocation\", subjectId: pending.adapterInvocationId };\n\t\t// The adapter row and the reconciliation log are written on the outer\n\t\t// store, not the transaction: neither has a transaction-scoped seam, and\n\t\t// both are idempotent by id, so a rolled-back verdict leaves evidence\n\t\t// that a retry reconciles rather than duplicates.\n\t\t// A parked invocation settles by the outcome. One that already ended for\n\t\t// another reason (a later step failed, a contract was violated, a\n\t\t// deadline passed) keeps its status: the callback is evidence of what\n\t\t// happened out there, not a verdict on the invocation.\n\t\tconst settles = (invocation.status === \"running\" && pending.parkedAt !== undefined)\n\t\t\t|| (invocation.status === \"reconciliation_required\" && invocation.error?.includes(\"did not complete by\") === true);\n\t\tif (completion.outcome === \"completed\") {\n\t\t\tconst action = actionResolver(invocation.actionId);\n\t\t\tconst merged = withoutPrivateHostFields({ ...invocation.result, ...(completion.result ?? {}) }, eventResultFields);\n\t\t\tif (action?.resultSchema) {\n\t\t\t\tconst parsedResult = action.resultSchema.safeParse(merged);\n\t\t\t\tif (!parsedResult.success) {\n\t\t\t\t\tthrow new ExternalCompletionError(\"result_invalid\", `External completion result validation failed at ${parsedResult.error.issues\n\t\t\t\t\t\t.map((issue) => issue.path.map(String).join(\".\") || \"result\")\n\t\t\t\t\t\t.join(\", \")}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait deps.store.updateAdapterInvocation(pending.adapterInvocationId, {\n\t\t\t\t...(completion.result ? { output: withoutPrivateHostFields(completion.result, eventResultFields) } : {}),\n\t\t\t\tupdatedAt: recordedAt,\n\t\t\t});\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ExternalOperationCompleted\",\n\t\t\t\t...subject,\n\t\t\t\tpayload: { externalReference: pending.externalReference, provider: pending.provider, ...(completion.result ? { result: withoutPrivateHostFields(completion.result, eventResultFields) } : {}) },\n\t\t\t}, `external:${pending.adapterInvocationId}:completed`, 1, writer.transaction);\n\t\t\tconst patch: ActionInvocationPatch = settles\n\t\t\t\t? { status: \"completed\", result: merged, externalCompletion, pendingCompletion: undefined, error: undefined }\n\t\t\t\t: { externalCompletion, pendingCompletion: undefined };\n\t\t\tawait writer.update(patch);\n\t\t\tif (settles) emitInvocationStatusTelemetry(invocation, \"completed\", deps.telemetry, now(), invocation.status);\n\t\t\treturn withConsistency(actionResult({ ...invocation, ...patch, result: settles ? merged : invocation.result, ...(settles ? { error: undefined } : {}) }), invocation.actionId);\n\t\t}\n\t\tconst error = completion.error ?? `External operation \"${pending.externalReference}\" failed.`;\n\t\tawait deps.store.updateAdapterInvocation(pending.adapterInvocationId, { status: \"failed\", error, updatedAt: recordedAt });\n\t\tawait appendEvent(invocation, {\n\t\t\teventType: \"ExternalOperationFailed\",\n\t\t\t...subject,\n\t\t\tpayload: { externalReference: pending.externalReference, provider: pending.provider, error },\n\t\t}, `external:${pending.adapterInvocationId}:failed`, 1, writer.transaction);\n\t\tconst patch: ActionInvocationPatch = settles\n\t\t\t? { status: \"failed\", error, externalCompletion, pendingCompletion: undefined }\n\t\t\t: { externalCompletion, pendingCompletion: undefined };\n\t\tawait writer.update(patch);\n\t\tif (settles) emitInvocationStatusTelemetry(invocation, \"failed\", deps.telemetry, now(), invocation.status);\n\t\treturn withConsistency(actionResult({ ...invocation, ...patch }), invocation.actionId);\n\t}\n\n\t/** What a completion says, minus when it was said. */\n\tfunction completionDigest(completion: ExternalCompletion, provider: string | undefined): string {\n\t\treturn createHash(\"sha256\").update(canonicalJson({\n\t\t\tprovider: provider ?? null,\n\t\t\texternalReference: completion.externalReference,\n\t\t\toutcome: completion.outcome,\n\t\t\tresult: completion.result ?? null,\n\t\t\terror: completion.error ?? null,\n\t\t\tevidenceReferences: completion.evidenceReferences ?? null,\n\t\t})).digest(\"hex\");\n\t}\n\n\tasync function recordCompletionReconciliation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tcompletion: Pick<ExternalCompletion, \"externalReference\" | \"evidenceReferences\"> & { provider?: string; kind?: string },\n\t\treason: string,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(deps.store);\n\t\tif (!governanceStore) throw new Error(\"External completion reconciliation requires a governance-capable store.\");\n\t\tconst provider = completion.provider ?? invocation.pendingCompletion?.provider ?? invocation.externalCompletion?.provider ?? \"external\";\n\t\t// Deterministic, and hashed so a long vendor reference cannot truncate\n\t\t// two distinct findings into one id.\n\t\tconst seed = createHash(\"sha256\").update(`${provider}\\u0000${completion.externalReference}\\u0000${completion.kind ?? \"refused\"}`).digest(\"hex\").slice(0, 32);\n\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\tid: lifecycleId(\"rec\", invocation.id, `ext:${seed}`),\n\t\t\tactionInvocationId: invocation.id,\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tstatus: \"pending\",\n\t\t\tprovider,\n\t\t\texternalOperationId: completion.externalReference,\n\t\t\tattempt: 1,\n\t\t\treason,\n\t\t\t...(completion.evidenceReferences ? { evidenceReferences: completion.evidenceReferences } : {}),\n\t\t\tobservedAt: now(),\n\t\t});\n\t}\n\n\tasync function reconcileOverdueCompletions(\n\t\tinput: ReconcileOverdueCompletionsInput = {},\n\t): Promise<{ overdue: string[] }> {\n\t\tconst recoverable = deps.store as Partial<RecoverablePlatformHostStore<TDb>>;\n\t\tif (!recoverable.listActionInvocations) {\n\t\t\tthrow new Error(\"Overdue completion reconciliation requires a store that can list invocations.\");\n\t\t}\n\t\tif (!asGovernanceStore(deps.store)) {\n\t\t\tthrow new Error(\"Overdue completion reconciliation requires a governance-capable store to record its findings.\");\n\t\t}\n\t\tconst current = input.now ?? now();\n\t\tconst candidates = await recoverable.listActionInvocations({\n\t\t\tstatuses: [\"running\"],\n\t\t\tcompletionDueBefore: current,\n\t\t\tunleased: true,\n\t\t\t...(input.tenantId ? { tenantId: input.tenantId } : {}),\n\t\t\t...(input.spaceId ? { spaceId: input.spaceId } : {}),\n\t\t\tlimit: Math.max(1, Math.min(input.limit ?? 100, 1_000)),\n\t\t});\n\t\tconst overdue: string[] = [];\n\t\tfor (const invocation of candidates) {\n\t\t\tconst pending = invocation.pendingCompletion;\n\t\t\tif (!pending?.dueAt || pending.dueAt.getTime() > current.getTime()) continue;\n\t\t\t// A leased row is a live worker's to finish, and its lease expiry\n\t\t\t// reclaims it if the worker died. An unleased, unparked row is an\n\t\t\t// inline execution that will never park; once overdue it is exactly\n\t\t\t// what this sweep exists to surface.\n\t\t\tif (invocation.leaseOwner) continue;\n\t\t\tconst message = `External operation \"${pending.externalReference}\" from ${pending.provider} did not complete by ${pending.dueAt.toISOString()}.`;\n\t\t\tawait recordCompletionReconciliation(invocation, { externalReference: pending.externalReference, provider: pending.provider, kind: \"overdue\" }, message);\n\t\t\t// The handoff stays recorded: a late completion is still the truth\n\t\t\t// about what happened, and it can still land.\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\toverdue.push(invocation.id);\n\t\t}\n\t\treturn { overdue };\n\t}\n\n\n\treturn { completeExternalInvocation, reconcileOverdueCompletions, recordCompletionReconciliation };\n}\n","import { types as utilTypes } from \"node:util\";\nimport type { ActionId } from \"@fabricorg/platform\";\nimport type { AuthorizationBinding, InvocationProvenance, SubmitActionInput } from \"./types\";\n\n/*\n * The one read of a caller's `SubmitActionInput` scalar fields.\n * `submitAction` calls `snapshotSubmission` before its first await and reads\n * only the result afterwards, so nothing the caller changes on its object\n * while Host awaits entitlement, `authorize`, a composition callback or an\n * admission check changes the action, scope, actor, correlation, causation,\n * idempotency key, binding id or execution reason Host authorizes, persists\n * or executes.\n *\n * `parameters`, `provenance` and `authorizationBinding` depend on the action.\n * For one that declares `admitSubmission`, `privateSubmission` reads each\n * once, also before the first await, and replaces it with Host's own copy.\n * For every other action they are not snapshotted: the snapshot's fields\n * read the caller's input each time Host reads them, at the points and as\n * often as Host read them before this snapshot existed (README, \"Submission\n * snapshot\").\n *\n * Internal: not exported from the package entry.\n */\n\n/** Thrown when a submission field cannot be read; the message is fixed. */\nexport class SubmissionUnreadableError extends Error {\n\toverride readonly name = \"SubmissionUnreadableError\";\n\tconstructor() {\n\t\tsuper(\"Platform Host submission could not be read as plain data; nothing was recorded.\");\n\t}\n}\n\n/**\n * Everything `submitAction` uses from a submission. The scalar fields are\n * primitives read once. `parameters`, `provenance` and `authorizationBinding`\n * read through to the caller's input (`snapshotSubmission`) until\n * `privateSubmission` replaces them with Host's copies.\n */\nexport interface SubmissionSnapshot {\n\treadonly actionId: ActionId;\n\treadonly tenantId: string;\n\treadonly spaceId: string;\n\treadonly actorId: string;\n\treadonly actorType: SubmitActionInput[\"actorType\"];\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n\treadonly provenance?: InvocationProvenance;\n\treadonly executionReason?: SubmitActionInput[\"executionReason\"];\n\treadonly idempotencyKey?: string;\n\treadonly authorizationBindingId?: string;\n\treadonly authorizationBinding?: AuthorizationBinding;\n\treadonly parameters: Record<string, unknown>;\n\t/** True when `parameters` is Host's own JSON-data copy (`privateSubmission`, when the copy succeeded). */\n\treadonly parametersArePrivate: boolean;\n}\n\ntype Scalars = Omit<SubmissionSnapshot, \"provenance\" | \"authorizationBinding\" | \"parameters\" | \"parametersArePrivate\">;\n\nclass NotJsonData extends Error {}\n\n/** `{ ok: true, value }` with a private copy, or `{ ok: false }` when `value` is not JSON data or a read threw. */\nexport type JsonDataCopy = { readonly ok: true; readonly value: unknown } | { readonly ok: false };\n\n/**\n * Copy a JSON value into fresh objects and arrays that nothing else holds.\n *\n * Accepted: `null`, strings, booleans, finite numbers (`-0` becomes `0`, as\n * JSON text does), dense arrays whose prototype is `Array.prototype`, and\n * objects whose prototype is `Object.prototype` or `null`. Of an object, the\n * own enumerable string-keyed properties are copied, each read exactly once\n * (a getter runs once); a property whose value is `undefined` is left out,\n * as `JSON.stringify` and the PostgreSQL store's `jsonb` column do. Symbol\n * keys and non-enumerable properties are skipped, as `JSON.stringify` skips\n * them.\n *\n * Refused (`{ ok: false }`): Proxies (`util.types.isProxy`), every other\n * prototype (Date, Map, class instances, boxed primitives, ArrayBuffer,\n * SharedArrayBuffer, typed arrays and DataView among them), functions,\n * symbols, bigints, non-finite numbers, array holes and `undefined` array\n * elements, cycles, nesting deep enough to exhaust the stack, and any read\n * that throws. What a read throws is not kept.\n */\nexport function copyJsonData(value: unknown): JsonDataCopy {\n\ttry {\n\t\treturn { ok: true, value: copy(value, new Set()) };\n\t} catch {\n\t\treturn { ok: false };\n\t}\n}\n\nfunction copy(value: unknown, ancestors: Set<object>): unknown {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) throw new NotJsonData();\n\t\treturn value === 0 ? 0 : value;\n\t}\n\tif (typeof value !== \"object\") throw new NotJsonData();\n\t// Checked first: every read below (prototype, keys, descriptors) would\n\t// otherwise run the Proxy's traps.\n\tif (utilTypes.isProxy(value)) throw new NotJsonData();\n\tif (ancestors.has(value)) throw new NotJsonData();\n\tconst prototype = Reflect.getPrototypeOf(value);\n\tancestors.add(value);\n\ttry {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (prototype !== Array.prototype) throw new NotJsonData();\n\t\t\tconst length = value.length;\n\t\t\tconst out: unknown[] = [];\n\t\t\tfor (let index = 0; index < length; index += 1) {\n\t\t\t\tconst descriptor = Reflect.getOwnPropertyDescriptor(value, String(index));\n\t\t\t\tif (descriptor === undefined) throw new NotJsonData();\n\t\t\t\tconst item = readOnce(value, descriptor);\n\t\t\t\tif (item === undefined) throw new NotJsonData();\n\t\t\t\tout.push(copy(item, ancestors));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tif (prototype !== Object.prototype && prototype !== null) throw new NotJsonData();\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const key of Reflect.ownKeys(value)) {\n\t\t\tif (typeof key !== \"string\") continue;\n\t\t\tconst descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n\t\t\tif (descriptor === undefined || descriptor.enumerable !== true) continue;\n\t\t\tconst item = readOnce(value, descriptor);\n\t\t\tif (item === undefined) continue;\n\t\t\t// defineProperty, not assignment, so a \"__proto__\" key stays an own property.\n\t\t\tReflect.defineProperty(out, key, { value: copy(item, ancestors), enumerable: true, writable: true, configurable: true });\n\t\t}\n\t\treturn out;\n\t} finally {\n\t\tancestors.delete(value);\n\t}\n}\n\nfunction readOnce(target: object, descriptor: PropertyDescriptor): unknown {\n\tif (\"value\" in descriptor) return descriptor.value;\n\treturn descriptor.get ? Reflect.apply(descriptor.get, target, []) : undefined;\n}\n\n/**\n * Read a submission's scalar fields once, in a fixed order. A scalar field\n * must hold a primitive (or be absent); one holding an object, a function or\n * a symbol, a read that throws, or an input that is not an object throws\n * `SubmissionUnreadableError`. None of these can happen for input of the\n * declared types. `parameters`, `provenance` and `authorizationBinding` are\n * not read here: the snapshot's fields of those names read the caller's\n * input each time they are read.\n */\nexport function snapshotSubmission(input: SubmitActionInput): SubmissionSnapshot {\n\tif (input === null || typeof input !== \"object\") throw new SubmissionUnreadableError();\n\tconst scalar = (key: keyof SubmitActionInput): unknown => primitiveOrAbsent(readField(input, key));\n\tconst actionId = scalar(\"actionId\");\n\tconst tenantId = scalar(\"tenantId\");\n\tconst spaceId = scalar(\"spaceId\");\n\tconst actorId = scalar(\"actorId\");\n\tconst actorType = scalar(\"actorType\");\n\tconst correlationId = scalar(\"correlationId\");\n\tconst causationId = scalar(\"causationId\");\n\tconst executionReason = scalar(\"executionReason\");\n\tconst idempotencyKey = scalar(\"idempotencyKey\");\n\tconst authorizationBindingId = scalar(\"authorizationBindingId\");\n\tconst scalars: Scalars = {\n\t\tactionId: actionId as ActionId,\n\t\ttenantId: tenantId as string,\n\t\tspaceId: spaceId as string,\n\t\tactorId: actorId as string,\n\t\tactorType: actorType as SubmitActionInput[\"actorType\"],\n\t\t...(correlationId != null ? { correlationId: correlationId as string } : {}),\n\t\t...(causationId != null ? { causationId: causationId as string } : {}),\n\t\t...(executionReason != null ? { executionReason: executionReason as SubmitActionInput[\"executionReason\"] } : {}),\n\t\t...(idempotencyKey != null ? { idempotencyKey: idempotencyKey as string } : {}),\n\t\t...(authorizationBindingId != null ? { authorizationBindingId: authorizationBindingId as string } : {}),\n\t};\n\tconst live = { ...scalars, parametersArePrivate: false } as SubmissionSnapshot;\n\t// Read through, not copied: the previous Host's reads of these fields,\n\t// unchanged for an action without admitSubmission.\n\tObject.defineProperties(live, {\n\t\tparameters: { get: () => input.parameters, enumerable: true },\n\t\tprovenance: { get: () => input.provenance, enumerable: true },\n\t\tauthorizationBinding: { get: () => input.authorizationBinding, enumerable: true },\n\t});\n\treturn Object.freeze(live);\n}\n\nconst PROVENANCE_SCALARS = [\"source\", \"correlationId\", \"causationId\"] as const;\nconst PROVENANCE_ATTRIBUTES = [\"traceAttributes\", \"auditAttributes\"] as const;\nconst BINDING_FIELDS = [\"id\", \"tenantId\", \"actorId\", \"actionId\", \"parameterDigest\", \"resourceScope\", \"capturedAt\", \"expiresAt\", \"governingMoment\"] as const;\n\n/**\n * The snapshot of a submission to an action that declares\n * `admitSubmission`, with Host's own copies of what the caller could still\n * reach. Reads each of the caller's `parameters`, `provenance` and\n * `authorizationBinding` exactly once. The parameters are copied with\n * `copyJsonData`; when that fails, the caller's object is kept,\n * `parametersArePrivate` stays false, and `submitAction` refuses the\n * submission as `invalid_parameters`. `provenance` and `authorizationBinding`\n * are copied field by field: each declared field is read once (an own or\n * inherited property, a getter included, so a class instance is accepted)\n * and undeclared fields are not copied; a scalar field must hold a\n * primitive, an attribute map must be an object whose own enumerable values\n * are primitives, and a read that throws, or anything else, throws\n * `SubmissionUnreadableError`. A falsy `provenance` or binding is absent.\n */\nexport function privateSubmission(snapshot: SubmissionSnapshot): SubmissionSnapshot {\n\tconst parameters = readField(snapshot, \"parameters\");\n\tconst provenanceRead = readField(snapshot, \"provenance\");\n\tconst bindingRead = readField(snapshot, \"authorizationBinding\");\n\tconst copied = copyJsonData(parameters);\n\tconst provenance = provenanceRead ? copyProvenance(provenanceRead) : undefined;\n\tconst authorizationBinding = bindingRead ? copyBinding(bindingRead) : undefined;\n\treturn Object.freeze({\n\t\tactionId: snapshot.actionId,\n\t\ttenantId: snapshot.tenantId,\n\t\tspaceId: snapshot.spaceId,\n\t\tactorId: snapshot.actorId,\n\t\tactorType: snapshot.actorType,\n\t\t...(snapshot.correlationId !== undefined ? { correlationId: snapshot.correlationId } : {}),\n\t\t...(snapshot.causationId !== undefined ? { causationId: snapshot.causationId } : {}),\n\t\t...(snapshot.executionReason !== undefined ? { executionReason: snapshot.executionReason } : {}),\n\t\t...(snapshot.idempotencyKey !== undefined ? { idempotencyKey: snapshot.idempotencyKey } : {}),\n\t\t...(snapshot.authorizationBindingId !== undefined ? { authorizationBindingId: snapshot.authorizationBindingId } : {}),\n\t\t...(provenance ? { provenance } : {}),\n\t\t...(authorizationBinding ? { authorizationBinding } : {}),\n\t\tparameters: (copied.ok ? copied.value : parameters) as Record<string, unknown>,\n\t\tparametersArePrivate: copied.ok,\n\t});\n}\n\nfunction readField(target: object, key: string): unknown {\n\ttry {\n\t\treturn (target as Record<string, unknown>)[key];\n\t} catch {\n\t\tthrow new SubmissionUnreadableError();\n\t}\n}\n\nfunction primitiveOrAbsent(value: unknown): unknown {\n\tif (value !== null && (typeof value === \"object\" || typeof value === \"function\" || typeof value === \"symbol\")) {\n\t\tthrow new SubmissionUnreadableError();\n\t}\n\treturn value;\n}\n\nfunction objectOf(value: unknown): object {\n\tif (value === null || typeof value !== \"object\") throw new SubmissionUnreadableError();\n\treturn value;\n}\n\nfunction copyFields(source: object, fields: readonly string[]): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {};\n\tfor (const field of fields) {\n\t\tconst value = primitiveOrAbsent(readField(source, field));\n\t\tif (value !== undefined) out[field] = value;\n\t}\n\treturn out;\n}\n\nfunction copyAttributes(source: object, field: string): Record<string, string> | undefined {\n\tconst value = readField(source, field);\n\tif (value === undefined || value === null) return undefined;\n\tconst map = objectOf(value);\n\tlet entries: [string, unknown][];\n\ttry {\n\t\tentries = Object.entries(map);\n\t} catch {\n\t\tthrow new SubmissionUnreadableError();\n\t}\n\tconst out: Record<string, string> = {};\n\tfor (const [key, item] of entries) {\n\t\t// defineProperty, not assignment, so a \"__proto__\" key stays an own property.\n\t\tReflect.defineProperty(out, key, { value: primitiveOrAbsent(item), enumerable: true, writable: true, configurable: true });\n\t}\n\treturn out;\n}\n\nfunction copyProvenance(value: unknown): InvocationProvenance {\n\tconst source = objectOf(value);\n\tconst out = copyFields(source, PROVENANCE_SCALARS);\n\tfor (const field of PROVENANCE_ATTRIBUTES) {\n\t\tconst attributes = copyAttributes(source, field);\n\t\tif (attributes !== undefined) out[field] = attributes;\n\t}\n\treturn out as unknown as InvocationProvenance;\n}\n\nfunction copyBinding(value: unknown): AuthorizationBinding {\n\treturn copyFields(objectOf(value), BINDING_FIELDS) as unknown as AuthorizationBinding;\n}\n\n/**\n * A fresh copy of the snapshot's parameters for code that should not reach\n * the copy Host persists (the admission check, a composition callback).\n * Only for a snapshot whose parameters are Host's copy.\n */\nexport function parametersCopy(snapshot: SubmissionSnapshot): Record<string, unknown> {\n\tif (!snapshot.parametersArePrivate) throw new SubmissionUnreadableError();\n\tconst copied = copyJsonData(snapshot.parameters);\n\tif (!copied.ok) throw new SubmissionUnreadableError();\n\treturn copied.value as Record<string, unknown>;\n}\n\n/**\n * The `SubmitActionInput` a callback typed to take one gets for an action\n * WITHOUT `admitSubmission` (`snapshotSubmission`, not `privateSubmission`).\n * Its scalar fields are the snapshot's, so the callback sees the action,\n * scope, actor and ids Host authorizes and persists, whatever the caller\n * changed on its object since submission. `parameters`, `provenance` and\n * `authorizationBinding` are accessors on the caller's input: each read\n * returns what `input[field]` holds at that moment and each write assigns\n * it, so the callback reaches the same objects, with the same reads, as\n * when it was handed the caller's input itself. The view is a new object\n * each call: other properties of the caller's object are not on it, and\n * assigning a scalar field changes only the view.\n */\nexport function liveSubmissionView(snapshot: SubmissionSnapshot, input: SubmitActionInput): SubmitActionInput {\n\tconst view: Record<string, unknown> = {\n\t\tactionId: snapshot.actionId,\n\t\ttenantId: snapshot.tenantId,\n\t\tspaceId: snapshot.spaceId,\n\t\tactorId: snapshot.actorId,\n\t\tactorType: snapshot.actorType,\n\t\t...(snapshot.correlationId !== undefined ? { correlationId: snapshot.correlationId } : {}),\n\t\t...(snapshot.causationId !== undefined ? { causationId: snapshot.causationId } : {}),\n\t\t...(snapshot.executionReason !== undefined ? { executionReason: snapshot.executionReason } : {}),\n\t\t...(snapshot.idempotencyKey !== undefined ? { idempotencyKey: snapshot.idempotencyKey } : {}),\n\t\t...(snapshot.authorizationBindingId !== undefined ? { authorizationBindingId: snapshot.authorizationBindingId } : {}),\n\t};\n\tconst caller = input as unknown as Record<string, unknown>;\n\tfor (const field of [\"parameters\", \"provenance\", \"authorizationBinding\"] as const) {\n\t\tObject.defineProperty(view, field, {\n\t\t\tget: () => caller[field],\n\t\t\tset: (value: unknown) => { caller[field] = value; },\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\treturn view as unknown as SubmitActionInput;\n}\n\n/**\n * A `SubmitActionInput` built from a private snapshot (`privateSubmission`),\n * with fresh copies of its parameters, provenance and binding, for a\n * callback typed to take one.\n */\nexport function submissionView(snapshot: SubmissionSnapshot): SubmitActionInput {\n\tconst fresh = <T>(value: T | undefined): T | undefined => {\n\t\tif (value === undefined) return undefined;\n\t\tconst copied = copyJsonData(value);\n\t\tif (!copied.ok) throw new SubmissionUnreadableError();\n\t\treturn copied.value as T;\n\t};\n\tconst provenance = fresh(snapshot.provenance);\n\tconst authorizationBinding = fresh(snapshot.authorizationBinding);\n\treturn {\n\t\tactionId: snapshot.actionId,\n\t\tparameters: parametersCopy(snapshot),\n\t\ttenantId: snapshot.tenantId,\n\t\tspaceId: snapshot.spaceId,\n\t\tactorId: snapshot.actorId,\n\t\tactorType: snapshot.actorType,\n\t\t...(snapshot.correlationId !== undefined ? { correlationId: snapshot.correlationId } : {}),\n\t\t...(snapshot.causationId !== undefined ? { causationId: snapshot.causationId } : {}),\n\t\t...(provenance ? { provenance } : {}),\n\t\t...(snapshot.executionReason !== undefined ? { executionReason: snapshot.executionReason } : {}),\n\t\t...(snapshot.idempotencyKey !== undefined ? { idempotencyKey: snapshot.idempotencyKey } : {}),\n\t\t...(snapshot.authorizationBindingId !== undefined ? { authorizationBindingId: snapshot.authorizationBindingId } : {}),\n\t\t...(authorizationBinding ? { authorizationBinding } : {}),\n\t};\n}\n","import { createFabricId } from \"@fabricorg/platform\";\nimport type {\n\tOutboxRequeuePlatformHostStore,\n\tOutboxStatus,\n\tPlatformHostOptions,\n\tRequeueOutboxDeadLetterInput,\n\tRequeueOutboxDeadLetterRefusal,\n\tRequeueOutboxDeadLetterResult,\n} from \"./types\";\nimport { emitPlatformHostTelemetry, PLATFORM_HOST_METRIC_NAMES } from \"./observability\";\n\n// ── Outbox dead-letter requeue ──────────────────────────────────────────────\n//\n// An operator moves a dead-lettered outbox record back to pending once the\n// consumer that rejected it is fixed. Authorization runs against the record as\n// read, and the store's compare-and-set accepts only that same dead letter:\n// the read's lease token travels with the write, so a decision cannot carry\n// over to a later dead-letter generation. The store writes the transition and\n// its evidence in one step. Not exported from the package\n// index; the host exposes it as `requeueOutboxDeadLetter`.\n\nconst MAX_REASON_LENGTH = 1_000;\n\nexport interface OutboxRequeueDeps<TDb> {\n\tstore: PlatformHostOptions<TDb>[\"store\"];\n\tauthorization: PlatformHostOptions<TDb>[\"authorization\"];\n\ttelemetry: PlatformHostOptions<TDb>[\"telemetry\"];\n\tnow(): Date;\n}\n\nexport function asOutboxRequeueStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): OutboxRequeuePlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<OutboxRequeuePlatformHostStore<TDb>>;\n\treturn typeof candidate.requeueOutboxDeadLetter === \"function\" &&\n\t\ttypeof candidate.getOutboxRecord === \"function\" &&\n\t\ttypeof candidate.listOutboxRequeues === \"function\"\n\t\t? (store as OutboxRequeuePlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nexport function createOutboxRequeue<TDb>(\n\tdeps: OutboxRequeueDeps<TDb>,\n): (input: RequeueOutboxDeadLetterInput) => Promise<RequeueOutboxDeadLetterResult> {\n\treturn async function requeueOutboxDeadLetter(input) {\n\t\tfor (const field of [\"outboxId\", \"tenantId\", \"spaceId\", \"actorId\", \"actorType\"] as const) {\n\t\t\tif (typeof input[field] !== \"string\" || input[field].trim() === \"\") {\n\t\t\t\tthrow new Error(`Outbox requeue requires ${field}.`);\n\t\t\t}\n\t\t}\n\t\tif (typeof input.reason !== \"string\" || input.reason.trim() === \"\") {\n\t\t\tthrow new Error(\"Outbox requeue requires a reason.\");\n\t\t}\n\t\tif (input.reason.length > MAX_REASON_LENGTH) {\n\t\t\tthrow new Error(`Outbox requeue reason must be at most ${MAX_REASON_LENGTH} characters.`);\n\t\t}\n\t\tif (input.availableAt !== undefined && !(input.availableAt instanceof Date && Number.isFinite(input.availableAt.getTime()))) {\n\t\t\tthrow new Error(\"Outbox requeue availableAt must be a valid Date.\");\n\t\t}\n\t\tconst store = asOutboxRequeueStore(deps.store);\n\t\tif (!store) throw new Error(\"Outbox requeue requires a store with outbox requeue support.\");\n\n\t\tconst refuse = (\n\t\t\trefusal: RequeueOutboxDeadLetterRefusal,\n\t\t\tmessage: string,\n\t\t\tcurrentStatus?: OutboxStatus,\n\t\t): RequeueOutboxDeadLetterResult => {\n\t\t\temitPlatformHostTelemetry(deps.telemetry, {\n\t\t\t\tkind: \"event\",\n\t\t\t\tname: \"outbox.requeue_refused\",\n\t\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxRequeueRefused,\n\t\t\t\toccurredAt: deps.now(),\n\t\t\t\ttenantId: input.tenantId,\n\t\t\t\tspaceId: input.spaceId,\n\t\t\t\tattributes: { refusal },\n\t\t\t});\n\t\t\treturn { status: \"refused\", refusal, message, ...(currentStatus ? { currentStatus } : {}) };\n\t\t};\n\n\t\tconst record = await store.getOutboxRecord(input.outboxId, input.tenantId, input.spaceId);\n\t\t// Authorize before revealing whether the record exists, so a refused actor\n\t\t// learns nothing about the scope. No authorizer means no requeue.\n\t\tconst authorization = deps.authorization;\n\t\tconst hasAuthorizer = typeof authorization.authorizeOutboxRequeue === \"function\";\n\t\t// Called through the authorization object so a class-based authorizer keeps its receiver.\n\t\tconst authorized = hasAuthorizer\n\t\t\t? await authorization.authorizeOutboxRequeue!({\n\t\t\t\ttenantId: input.tenantId,\n\t\t\t\tspaceId: input.spaceId,\n\t\t\t\tactorId: input.actorId,\n\t\t\t\tactorType: input.actorType,\n\t\t\t\toutboxId: input.outboxId,\n\t\t\t\treason: input.reason,\n\t\t\t\t...(record ? {\n\t\t\t\t\trecord: {\n\t\t\t\t\t\teventId: record.event.eventId,\n\t\t\t\t\t\teventType: record.event.eventType,\n\t\t\t\t\t\tpayloadClassification: record.event.payloadClassification,\n\t\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t\tattemptCount: record.attemptCount,\n\t\t\t\t\t},\n\t\t\t\t} : {}),\n\t\t\t})\n\t\t\t: false;\n\t\tif (authorized !== true) {\n\t\t\treturn refuse(\n\t\t\t\t\"not_authorized\",\n\t\t\t\thasAuthorizer\n\t\t\t\t\t? `Actor ${input.actorId} is not authorized to requeue outbox records in this scope.`\n\t\t\t\t\t: \"Outbox requeue is refused because no authorizeOutboxRequeue is configured.\",\n\t\t\t);\n\t\t}\n\t\tif (!record) return refuse(\"not_found\", `Outbox record not found: ${input.outboxId}`);\n\t\tif (record.status !== \"dead_letter\") {\n\t\t\treturn refuse(\"not_dead_letter\", `Outbox record ${input.outboxId} is ${record.status}, not dead_letter.`, record.status);\n\t\t}\n\n\t\t// The compare-and-set is the guard that counts. Another requeue may have\n\t\t// won since the read above, or the record may have been requeued, retried\n\t\t// and dead-lettered again while the authorizer ran; the store refuses\n\t\t// unless the record is still the dead letter at the lease token we read.\n\t\tconst requeuedAt = deps.now();\n\t\tconst result = await store.requeueOutboxDeadLetter({\n\t\t\tid: input.outboxId,\n\t\t\ttenantId: input.tenantId,\n\t\t\tspaceId: input.spaceId,\n\t\t\trequeueId: createFabricId(\"orq\"),\n\t\t\tactorId: input.actorId,\n\t\t\tactorType: input.actorType,\n\t\t\treason: input.reason,\n\t\t\trequeuedAt,\n\t\t\tavailableAt: input.availableAt ?? requeuedAt,\n\t\t\texpectedLeaseToken: record.leaseToken ?? 0,\n\t\t});\n\t\tif (!result.applied) {\n\t\t\tif (result.refusal === \"not_found\") return refuse(\"not_found\", `Outbox record not found: ${input.outboxId}`);\n\t\t\tif (result.refusal === \"stale\") {\n\t\t\t\treturn refuse(\n\t\t\t\t\t\"stale\",\n\t\t\t\t\t`Outbox record ${input.outboxId} changed after it was authorized; read and authorize it again.`,\n\t\t\t\t\tresult.currentStatus,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn refuse(\n\t\t\t\t\"not_dead_letter\",\n\t\t\t\t`Outbox record ${input.outboxId} is ${result.currentStatus ?? \"no longer dead_letter\"}, not dead_letter.`,\n\t\t\t\tresult.currentStatus,\n\t\t\t);\n\t\t}\n\t\temitPlatformHostTelemetry(deps.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"outbox.requeued\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxRequeued,\n\t\t\toccurredAt: requeuedAt,\n\t\t\ttenantId: input.tenantId,\n\t\t\tspaceId: input.spaceId,\n\t\t\tattributes: { priorAttempt: result.requeue.priorAttemptCount },\n\t\t});\n\t\treturn { status: \"requeued\", record: result.record, requeue: result.requeue };\n\t};\n}\n","import {\n\tAdapterCircuitBreakerRegistry,\n\tAdapterRegistry,\n\tassertAdapterCircuitBreakerConfig,\n\tisAdapterCircuitOpenError,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tassertAdapterOutcomeConsistency,\n\tevaluateStateMachineTransition,\n\tassertMutationGovernanceContext,\n\tassertGovernanceRuntimeEvidence,\n\tFABRIC_GOVERNANCE_CONTRACT_VERSION,\n} from \"@fabricorg/platform\";\nimport { performance } from \"node:perf_hooks\";\nimport { assertAssemblyRuntimeCompatible } from \"@fabricorg/assembly\";\nimport type {\n\tActionDefinition,\n\tActionId,\n\tActionStatus,\n\tAssetEventEnvelope,\n\tRuntimePolicyDefinition,\n\tExecutionAttestation,\n\tExternalReconciliation,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionApprovalDecision,\n\tActionAuthorizationInput,\n\tActionExecutionReason,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tAdapterReconciliationOutcome,\n\tApprovalPlatformHostStore,\n\tExecuteActionResult,\n\tExecuteInvocationOptions,\n\tGovernedActionHost,\n\tOutboxRequeueHost,\n\tPendingAssetEvent,\n\tOutboxPlatformHostStore,\n\tPlatformHostOptions,\n\tPlatformHostMutationTransaction,\n\tSubmitActionInput,\n\tSubmitActionResult,\n\tIdempotencyConflict,\n\tRecoverablePlatformHostStore,\n\tActionInvocationPatch,\n\tPendingExternalCompletion,\n} from \"./types\";\nimport { ActionAdmissionError, IdempotencyConflictError, PLATFORM_HOST_CONTRACT_VERSION } from \"./types\";\nimport type { ActionAdmissionRefusal } from \"./types\";\nimport { digestParameters, normalizeProvenance, PARAMETER_DIGEST_ALGORITHM } from \"./command-identity\";\nimport { createExternalCompletionLifecycle } from \"./external-completion\";\nimport { liveSubmissionView, parametersCopy, privateSubmission, snapshotSubmission, submissionView, type SubmissionSnapshot } from \"./submission-snapshot\";\nimport { createOutboxRequeue } from \"./outbox-requeue\";\nimport {\n\tasAtomicMutationStore,\n\tasGovernanceStore,\n\temitInvocationStatusTelemetry,\n\terrorMessage,\n\tlifecycleId,\n\twithoutPrivateHostFields,\n} from \"./host-internals\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n} from \"./observability\";\n\nconst DEFAULT_EXTRACT_EVENTS = (data: Record<string, unknown>): PendingAssetEvent[] => {\n\tconst value = data._events;\n\treturn Array.isArray(value) ? (value as PendingAssetEvent[]) : [];\n};\n\nclass RecoverableFinalizationError extends Error {\n\toverride readonly name = \"RecoverableFinalizationError\";\n}\n\nconst DEFAULT_ADMISSION_TIMEOUT_MS = 10_000;\n/** The largest delay `setTimeout` honours (2^31 - 1 ms); a larger one fires at once. */\nconst MAX_TIMER_MS = 2_147_483_647;\n/** Monotonic milliseconds, captured at module load: the admission deadline is judged on it. */\nconst monotonicNow: () => number = performance.now.bind(performance);\ntype AdmissionOutcome = { kind: \"answered\"; value: unknown } | { kind: \"failed\" } | { kind: \"timed_out\" };\nconst ADMISSION_FAILED: AdmissionOutcome = Object.freeze({ kind: \"failed\" });\nconst ADMISSION_TIMED_OUT: AdmissionOutcome = Object.freeze({ kind: \"timed_out\" });\n/** What an admission refusal's code may look like; anything else is `invalid_decision`. */\nconst ADMISSION_REFUSAL_CODE = /^[a-z][A-Za-z0-9_.:-]{0,127}$/;\n\nexport function createGovernedActionHost<TDb>(\n\toptions: PlatformHostOptions<TDb>,\n): GovernedActionHost & OutboxRequeueHost {\n\tif (options.composition) {\n\t\tif (!options.registry?.orderedModules) {\n\t\t\tthrow new Error(\"Composition-bound Platform Host requires an explicit module registry.\");\n\t\t}\n\t\tassertAssemblyRuntimeCompatible(\n\t\t\toptions.composition.assembly,\n\t\t\toptions.registry.orderedModules.map((module) => ({\n\t\t\t\tnamespace: module.namespace,\n\t\t\t\tversion: module.version ?? \"\",\n\t\t\t\tmanifestDigest: module.manifestDigest ?? \"\",\n\t\t\t})),\n\t\t);\n\t}\n\tif (options.outbox) {\n\t\tconst outboxStore = asOutboxStore(options.store);\n\t\tif (!outboxStore || !asAtomicMutationStore(options.store) || outboxStore.transactionalOutbox !== true) {\n\t\t\tthrow new Error(\"Outbox egress requires a store with transactionalOutbox and transactionWithEvents capabilities.\");\n\t\t}\n\t}\n\tconst adapters = new AdapterRegistry();\n\tfor (const adapter of options.adapters ?? []) {\n\t\t// A breaker config was inert before Host read it; refuse a bad one at\n\t\t// construction rather than on the first adapter call.\n\t\tif (adapter.circuitBreaker) assertAdapterCircuitBreakerConfig(adapter.circuitBreaker);\n\t\tadapters.register(adapter);\n\t}\n\tconst now = options.now ?? (() => new Date());\n\t// One breaker per adapterType:operation for this Host instance, created on\n\t// first use and only for adapters that declare a circuitBreaker config.\n\tconst circuitBreakers = options.adapterCircuitBreakers\n\t\t?? new AdapterCircuitBreakerRegistry({ now: () => now().getTime() });\n\tconst extractEvents = options.extractEvents ?? DEFAULT_EXTRACT_EVENTS;\n\tconst configuredActionResolver = options.resolveAction ?? options.registry?.resolveAction;\n\tif (!configuredActionResolver) throw new Error(\"Platform Host requires an explicit module registry or resolveAction function.\");\n\tconst actionResolver: NonNullable<PlatformHostOptions<TDb>[\"resolveAction\"]> = configuredActionResolver;\n\tconst stateMachineResolver = options.registry?.resolveStateMachine ?? (() => undefined);\n\tconst eventResultFields = options.eventResultFields ?? [\"_events\"];\n\tconst admissionTimeoutMs = options.admissionTimeoutMs ?? DEFAULT_ADMISSION_TIMEOUT_MS;\n\tif (typeof admissionTimeoutMs !== \"number\" || !Number.isInteger(admissionTimeoutMs) || admissionTimeoutMs < 1 || admissionTimeoutMs > MAX_TIMER_MS) {\n\t\tthrow new Error(`admissionTimeoutMs must be a whole number of milliseconds from 1 to ${MAX_TIMER_MS}.`);\n\t}\n\n\tasync function submitAction(input: SubmitActionInput): Promise<SubmitActionResult> {\n\t\t// The one read of the caller's scalar fields, before the first await.\n\t\t// Every step below reads `submission`, so what the caller changes on its\n\t\t// object while Host awaits cannot change the action, scope, actor, ids\n\t\t// or keys Host authorizes, persists or executes (tests \"the submission\n\t\t// Host authorizes, admits, persists and executes is one private\n\t\t// snapshot\" and \"the identity snapshot still applies …\").\n\t\tconst read = snapshotSubmission(input);\n\t\tif (read.executionReason && ![\"initial\", \"offline_replay\"].includes(read.executionReason)) {\n\t\t\tthrow new Error(`Unsupported submitted execution reason: ${read.executionReason}`);\n\t\t}\n\t\tconst action = actionResolver(read.actionId);\n\t\tif (!action) throw new Error(`Unknown action: ${read.actionId}`);\n\t\t// An action that declares admitSubmission gets Host's own copies of the\n\t\t// parameters, provenance and binding, also before the first await. For\n\t\t// any other action `submission` reads those three from the caller's\n\t\t// input wherever Host reads them below, exactly as before the snapshot\n\t\t// existed (tests \"an action without admitSubmission: everything but the\n\t\t// identity snapshot is as before\").\n\t\tconst declaresAdmission = action.admitSubmission !== undefined;\n\t\tconst submission = declaresAdmission ? privateSubmission(read) : read;\n\t\t// An action that requires connectivity was never eligible to be captured offline.\n\t\tif (action.execution?.connectivity === \"online-required\" && submission.executionReason === \"offline_replay\") {\n\t\t\tthrow new Error(`Action ${submission.actionId} is online-required and cannot be submitted as an offline replay.`);\n\t\t}\n\t\tif (action.execution?.sensitivity === \"restricted\" && Object.keys(submission.provenance?.auditAttributes ?? {}).length > 0) {\n\t\t\tthrow new Error(`Action ${submission.actionId} declares restricted sensitivity; provenance audit attributes must not be durably recorded.`);\n\t\t}\n\t\tconst authorizationInput = toAuthorizationInput(action, submission);\n\t\tif (!(await options.authorization.checkEntitlement(authorizationInput))) {\n\t\t\tthrow new Error(`Module \"${action.namespace}\" is not enabled for tenant ${submission.tenantId}`);\n\t\t}\n\t\tif (!(await options.authorization.authorize(authorizationInput))) {\n\t\t\tthrow new Error(`Actor ${submission.actorId} is not authorized for action ${submission.actionId}`);\n\t\t}\n\t\t// Only JSON data Host copied at submission can be admitted: anything else\n\t\t// could still be changed through a reference the caller holds. Refused\n\t\t// here, before any callback could be handed the caller's object.\n\t\tif (declaresAdmission && (!submission.parametersArePrivate || !isRecord(submission.parameters))) {\n\t\t\trefuseAdmission(action, submission, \"invalid_parameters\");\n\t\t}\n\n\t\tconst actionInvocationId = createFabricId(\"act\");\n\t\tif (submission.correlationId && submission.provenance?.correlationId && submission.correlationId !== submission.provenance.correlationId) throw new Error(\"Invocation provenance correlationId does not match submission correlationId.\");\n\t\tif (submission.causationId && submission.provenance?.causationId && submission.causationId !== submission.provenance.causationId) throw new Error(\"Invocation provenance causationId does not match submission causationId.\");\n\t\tconst correlationId = submission.correlationId ?? submission.provenance?.correlationId ?? createFabricId(\"corr\");\n\t\t// Redaction, the parameter digest and the binding check. For an action\n\t\t// without admitSubmission they run here, before provenance and the\n\t\t// composition callback, as they always did; for one with it, after its\n\t\t// check admitted the submission, on Host's copy.\n\t\t// Each reads `submission.parameters` where and as often as the previous\n\t\t// Host read the caller's: for an action without the check those reads\n\t\t// go to the caller's input (src/submission-snapshot.ts).\n\t\tconst prepare = () => {\n\t\t\tconst durableParameters = options.redactActionParameters\n\t\t\t\t? options.redactActionParameters(submission.actionId, submission.parameters)\n\t\t\t\t: submission.parameters;\n\t\t\tconst parameterDigest = digestParameters(submission.parameters);\n\t\t\tif (submission.authorizationBinding) validateAuthorizationBinding(submission, parameterDigest, action.execution?.authorityMoment, now());\n\t\t\treturn { durableParameters, parameterDigest };\n\t\t};\n\t\tconst early = declaresAdmission ? undefined : prepare();\n\t\tconst durableProvenance = normalizeProvenance(\n\t\t\tsubmission.provenance,\n\t\t\toptions.provenance as PlatformHostOptions<unknown>[\"provenance\"],\n\t\t);\n\t\t// Both views carry the snapshot's identity, so the callback resolves\n\t\t// evidence for the action, scope and actor Host persists. A declaring\n\t\t// action's callback gets fresh copies of Host's parameters, provenance\n\t\t// and binding; any other action's reads and assigns the caller's, as\n\t\t// when it was handed the caller's input (liveSubmissionView).\n\t\tconst initiatingReleaseDigest =\n\t\t\tawait options.composition?.resolveInitiatingReleaseDigest?.(declaresAdmission ? submissionView(submission) : liveSubmissionView(submission, input));\n\t\tconst runtimeEvidence = {\n\t\t\tgovernanceContractVersion: FABRIC_GOVERNANCE_CONTRACT_VERSION,\n\t\t\thostContractVersion: PLATFORM_HOST_CONTRACT_VERSION,\n\t\t\t...options.runtimeEvidence,\n\t\t\t...(options.composition\n\t\t\t\t? { assemblyDigest: options.composition.assembly.assemblyDigest }\n\t\t\t\t: {}),\n\t\t\t...(initiatingReleaseDigest\n\t\t\t\t? { initiatingReleaseDigest }\n\t\t\t\t: {}),\n\t\t};\n\t\tassertGovernanceRuntimeEvidence(runtimeEvidence);\n\t\t// The action's admission check is the last await before the invocation\n\t\t// is created: everything between it and createActionInvocation is\n\t\t// synchronous, and it runs on every submission, including one that\n\t\t// reuses an idempotency key, so a refused submission is never digested,\n\t\t// matched against an existing invocation, redacted or written.\n\t\tconst admission = declaresAdmission\n\t\t\t? await admitSubmission(action, submission)\n\t\t\t: undefined;\n\t\tconst { durableParameters, parameterDigest } = early ?? prepare();\n\t\tconst durableInvocation = await options.store.createActionInvocation({\n\t\t\tid: actionInvocationId,\n\t\t\ttenantId: submission.tenantId,\n\t\t\tspaceId: submission.spaceId,\n\t\t\tactionId: submission.actionId,\n\t\t\tactionVersion: action.version,\n\t\t\tactorId: submission.actorId,\n\t\t\tactorType: submission.actorType,\n\t\t\tstatus: \"pending\",\n\t\t\tparameters: durableParameters,\n\t\t\tresult: {},\n\t\t\truntimeEvidence,\n\t\t\tcorrelationId,\n\t\t\t...((submission.causationId ?? submission.provenance?.causationId) ? { causationId: submission.causationId ?? submission.provenance?.causationId } : {}),\n\t\t\t...(submission.idempotencyKey ? { idempotencyKey: submission.idempotencyKey } : {}),\n\t\t\t...(submission.idempotencyKey ? {\n\t\t\t\tparameterDigest,\n\t\t\t\tparameterDigestAlgorithm: PARAMETER_DIGEST_ALGORITHM,\n\t\t\t\tidempotencyActorId: submission.actorId,\n\t\t\t\t...(submission.authorizationBindingId ? { idempotencyAuthorizationBindingId: submission.authorizationBindingId } : {}),\n\t\t\t} : {}),\n\t\t\t...(durableProvenance ? { provenance: durableProvenance } : {}),\n\t\t\t...(submission.authorizationBinding ? { authorizationBinding: submission.authorizationBinding } : {}),\n\t\t\t...(submission.executionReason ? { executionReason: submission.executionReason } : {}),\n\t\t\t...(submission.authorizationBindingId\n\t\t\t\t? { authorizationBindingId: submission.authorizationBindingId }\n\t\t\t\t: {}),\n\t\t\t...(admission ? { admittedAt: admission.admittedAt } : {}),\n\t\t});\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.submitted\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationSubmitted,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId: submission.tenantId,\n\t\t\tspaceId: submission.spaceId,\n\t\t\tattributes: { actionVersion: action.version },\n\t\t});\n\t\tif (durableInvocation.id !== actionInvocationId && submission.idempotencyKey) {\n\t\t\tconst conflict = idempotencyConflict(durableInvocation, {\n\t\t\t\tactorId: submission.actorId,\n\t\t\t\tauthorizationBindingId: submission.authorizationBindingId,\n\t\t\t\tactionVersion: action.version,\n\t\t\t\tparameterDigest,\n\t\t\t\tidempotencyKey: submission.idempotencyKey,\n\t\t\t});\n\t\t\tif (!durableInvocation.parameterDigest) {\n\t\t\t\toptions.idempotency?.onLegacyRecord?.(durableInvocation);\n\t\t\t\tconst enforceableLegacyConflict = conflict && { ...conflict, reasons: conflict.reasons.filter((reason) => reason !== \"parameters\") };\n\t\t\t\tif (enforceableLegacyConflict && enforceableLegacyConflict.reasons.length) {\n\t\t\t\t\toptions.idempotency?.onConflict?.(enforceableLegacyConflict);\n\t\t\t\t\tif ((options.idempotency?.conflictMode ?? \"enforce\") === \"enforce\") throw new IdempotencyConflictError(enforceableLegacyConflict);\n\t\t\t\t}\n\t\t\t} else if (conflict) {\n\t\t\t\toptions.idempotency?.onConflict?.(conflict);\n\t\t\t\tif ((options.idempotency?.conflictMode ?? \"enforce\") === \"enforce\") throw new IdempotencyConflictError(conflict);\n\t\t\t}\n\t\t}\n\t\tconst durableWorkflowId = `action-invocation-${durableInvocation.id}`;\n\t\tif (durableInvocation.id !== actionInvocationId) {\n\t\t\t// A pending dispatch may be retried with the same stable workflow id.\n\t\t\t// Terminal and running invocations report what the original did.\n\t\t\tif (options.dispatcher && durableInvocation.status === \"pending\") {\n\t\t\t\tconst dispatched = await options.dispatcher.dispatch({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tactionId: durableInvocation.actionId,\n\t\t\t\t\ttenantId: submission.tenantId,\n\t\t\t\t\tspaceId: submission.spaceId,\n\t\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\t});\n\t\t\t\treturn withConsistency({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\t\tworkflowId: dispatched.workflowId,\n\t\t\t\t\t...(dispatched.runId ? { runId: dispatched.runId } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t}, submission.actionId);\n\t\t\t}\n\t\t\treturn withConsistency({\n\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\tresult: durableInvocation.result,\n\t\t\t\t...(durableInvocation.error ? { error: durableInvocation.error } : {}),\n\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.authorizationReconciliation\n\t\t\t\t\t? { reconciliation: durableInvocation.authorizationReconciliation }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.adapterReconciliation\n\t\t\t\t\t? { adapterReconciliation: durableInvocation.adapterReconciliation }\n\t\t\t\t\t: {}),\n\t\t\t\t...(durableInvocation.pendingCompletion\n\t\t\t\t\t? { pendingCompletion: durableInvocation.pendingCompletion }\n\t\t\t\t\t: {}),\n\t\t\t}, submission.actionId);\n\t\t}\n\n\t\tif (options.dispatcher) {\n\t\t\ttry {\n\t\t\t\tconst dispatched = await options.dispatcher.dispatch({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tactionId: durableInvocation.actionId,\n\t\t\t\t\ttenantId: submission.tenantId,\n\t\t\t\t\tspaceId: submission.spaceId,\n\t\t\t\t\tworkflowId: durableWorkflowId,\n\t\t\t\t});\n\t\t\t\treturn withConsistency({\n\t\t\t\t\tactionInvocationId: durableInvocation.id,\n\t\t\t\t\tstatus: durableInvocation.status,\n\t\t\t\t\tworkflowId: dispatched.workflowId,\n\t\t\t\t\t...(dispatched.runId ? { runId: dispatched.runId } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRoute ? { hitlRoute: durableInvocation.hitlRoute } : {}),\n\t\t\t\t\t...(durableInvocation.hitlRiskTier\n\t\t\t\t\t\t? { hitlRiskTier: durableInvocation.hitlRiskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t}, submission.actionId);\n\t\t\t} catch (error) {\n\t\t\t\t// The durable invocation remains pending. A caller can resubmit the\n\t\t\t\t// same idempotency key, or an out-of-band dispatcher can retry the\n\t\t\t\t// stable workflow id without recreating the logical mutation.\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst executed = await executeInvocation(\n\t\t\tdurableInvocation.id,\n\t\t\tsubmission.tenantId,\n\t\t\tsubmission.spaceId,\n\t\t);\n\t\treturn { ...withConsistency(executed, submission.actionId), workflowId: durableWorkflowId };\n\t}\n\n\t/**\n\t * Run the action's `admitSubmission` check on a copy of the submission\n\t * snapshot's parameters, with the snapshot's scope and actor, bounded by\n\t * `admissionTimeoutMs`. Returns when it was admitted; anything but\n\t * `{ admitted: true }` settled within the bound throws\n\t * ActionAdmissionError before anything durable is written. What the check\n\t * throws is never read.\n\t *\n\t * The bound is judged when the check's promise settles, on the monotonic\n\t * clock (`performance.now()`): an answer that settles `admissionTimeoutMs`\n\t * or more after the call began is `timed_out`, even when its handler runs\n\t * before the timer callback (a check that blocked the event loop past the\n\t * deadline). The timer only ends the wait on a promise that never settles.\n\t * Every `timed_out` refusal aborts the check's signal before it throws.\n\t */\n\tasync function admitSubmission(\n\t\taction: ActionDefinition<TDb>,\n\t\tsubmission: SubmissionSnapshot,\n\t): Promise<{ admittedAt: Date }> {\n\t\tconst refuse = (refusal: ActionAdmissionRefusal, refusalCode?: string): never =>\n\t\t\trefuseAdmission(action, submission, refusal, refusalCode);\n\t\tconst check = action.admitSubmission;\n\t\tif (typeof check !== \"function\") return refuse(\"failed\");\n\t\t// submitAction refused parameters that are not Host's private JSON copy.\n\t\tconst checked = parametersCopy(submission);\n\t\tconst controller = new AbortController();\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst deadline = new Promise<AdmissionOutcome>((resolve) => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tcontroller.abort();\n\t\t\t\tresolve(ADMISSION_TIMED_OUT);\n\t\t\t}, admissionTimeoutMs);\n\t\t});\n\t\tconst startedAt = monotonicNow();\n\t\tconst settledInTime = (): boolean => monotonicNow() - startedAt < admissionTimeoutMs;\n\t\tlet answered: Promise<AdmissionOutcome>;\n\t\ttry {\n\t\t\tanswered = Promise.resolve(check(Object.freeze({\n\t\t\t\tactionId: action.actionId,\n\t\t\t\ttenantId: submission.tenantId,\n\t\t\t\tspaceId: submission.spaceId,\n\t\t\t\tactorId: submission.actorId,\n\t\t\t\tactorType: submission.actorType,\n\t\t\t\tparameters: checked,\n\t\t\t\tsignal: controller.signal,\n\t\t\t}))).then(\n\t\t\t\t(value: unknown): AdmissionOutcome => settledInTime() ? { kind: \"answered\", value } : ADMISSION_TIMED_OUT,\n\t\t\t\t(): AdmissionOutcome => settledInTime() ? ADMISSION_FAILED : ADMISSION_TIMED_OUT,\n\t\t\t);\n\t\t} catch {\n\t\t\tanswered = Promise.resolve(settledInTime() ? ADMISSION_FAILED : ADMISSION_TIMED_OUT);\n\t\t}\n\t\tlet outcome: AdmissionOutcome;\n\t\ttry {\n\t\t\toutcome = await Promise.race([answered, deadline]);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\tif (outcome.kind === \"timed_out\") {\n\t\t\tcontroller.abort();\n\t\t\treturn refuse(\"timed_out\");\n\t\t}\n\t\tif (outcome.kind === \"failed\") return refuse(\"failed\");\n\t\tconst admitted = ownDataProperty(outcome.value, \"admitted\");\n\t\tif (admitted === true) return { admittedAt: now() };\n\t\tconst code = ownDataProperty(outcome.value, \"code\");\n\t\tif (admitted === false && typeof code === \"string\" && ADMISSION_REFUSAL_CODE.test(code)) return refuse(\"refused\", code);\n\t\treturn refuse(\"invalid_decision\");\n\t}\n\n\tfunction refuseAdmission(\n\t\taction: ActionDefinition<TDb>,\n\t\tsubmission: SubmissionSnapshot,\n\t\trefusal: ActionAdmissionRefusal,\n\t\trefusalCode?: string,\n\t): never {\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.admission_refused\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationAdmissionRefused,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId: submission.tenantId,\n\t\t\tspaceId: submission.spaceId,\n\t\t\tattributes: { actionVersion: action.version, refusal },\n\t\t});\n\t\tthrow new ActionAdmissionError(action.actionId, refusal, refusalCode);\n\t}\n\n\tasync function executeInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\texecutionOptions: ExecuteInvocationOptions = {},\n\t\texecutionReasonOverride?: ActionExecutionReason,\n\t): Promise<ExecuteActionResult> {\n\t\tconst loadedInvocation = await options.store.getActionInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t);\n\t\tif (!loadedInvocation) {\n\t\t\tthrow new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\t}\n\t\tconst resumingRunningInvocation = loadedInvocation.status === \"running\";\n\t\tlet invocation: ActionInvocationRecord = loadedInvocation;\n\t\tif (isTerminal(invocation.status) || invocation.status === \"waiting_for_approval\") {\n\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t}\n\t\tif (invocation.status === \"running\" && invocation.pendingCompletion && !invocation.leaseOwner) {\n\t\t\t// Parked, not stuck: an external system holds the next move. A\n\t\t\t// leased row with a handoff is the other case, a worker that died\n\t\t\t// between accepting the handoff and finalizing, and that one runs\n\t\t\t// on so finalization can complete; the loop skips the handed-off step.\n\t\t\treturn withConsistency(actionResult(invocation), invocation.actionId);\n\t\t}\n\t\tif (\n\t\t\tinvocation.status === \"running\" &&\n\t\t\tinvocation.leaseOwner &&\n\t\t\t(executionOptions.leaseOwner !== invocation.leaseOwner ||\n\t\t\t\t((invocation.leaseToken ?? 0) > 0 &&\n\t\t\t\t\texecutionOptions.leaseToken !== invocation.leaseToken))\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Invocation lease is not owned by the supplied worker generation`,\n\t\t\t};\n\t\t}\n\t\tconst action = actionResolver(invocation.actionId);\n\t\tif (!action) {\n\t\t\treturn fail(invocation, \"failed\", `Unknown action: ${invocation.actionId}`);\n\t\t}\n\t\tif (action.admitSubmission !== undefined && !isAdmissionTime(invocation.admittedAt)) {\n\t\t\t// Created without this host's admission: by an older host, a direct\n\t\t\t// store write, or before the action declared its check.\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Invocation of ${action.actionId} was not admitted at submission; an action that declares admitSubmission runs only on invocations its check admitted.`,\n\t\t\t);\n\t\t}\n\t\tif (action.kind === \"saga\") {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Saga action ${invocation.actionId} requires a durable PlatformActionDispatcher and cannot execute as an atomic Host action.`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tresumingRunningInvocation &&\n\t\t\tinvocation.attemptCount === 0 &&\n\t\t\t!invocation.leaseOwner &&\n\t\t\t!action.idempotent\n\t\t) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Interrupted inline action ${invocation.actionId} is not declared idempotent; manual reconciliation is required.`,\n\t\t\t);\n\t\t}\n\t\tif (invocation.attemptCount > 1 && !action.idempotent) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Interrupted action ${invocation.actionId} is not declared idempotent; manual reconciliation is required.`,\n\t\t\t);\n\t\t}\n\t\tif (invocation.status !== \"running\") {\n\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\t\tstatus: \"running\",\n\t\t\t});\n\t\t}\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.execution_started\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationExecutionStarted,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tattributes: { actionVersion: invocation.actionVersion },\n\t\t});\n\t\ttry {\n\n\t\tconst parsed = action.schema.safeParse(invocation.parameters);\n\t\tif (!parsed.success) {\n\t\t\tconst message = parsed.error.issues\n\t\t\t\t.map((issue) => `${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n\t\t\t\t.join(\"; \");\n\t\t\treturn fail(invocation, \"validation_failed\", message);\n\t\t}\n\n\t\tif (options.resolveMutationGovernance && !invocation.mutationFootprint) {\n\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\tif (!governanceStore) {\n\t\t\t\treturn fail(invocation, \"failed\", \"The configured mutation-governance resolver requires a governance-capable store.\");\n\t\t\t}\n\t\t\tconst context = await options.resolveMutationGovernance({\n\t\t\t\tactionInvocationId, actionId: action.actionId, tenantId, spaceId,\n\t\t\t\tactorId: invocation.actorId, actorType: invocation.actorType, parameters: parsed.data,\n\t\t\t});\n\t\t\tassertMutationGovernanceContext(context);\n\t\t\tinvocation = await governanceStore.recordMutationGovernance(actionInvocationId, tenantId, spaceId, context);\n\t\t}\n\n\t\tif (invocation.actorType === \"agent\" && options.hitlEvaluator) {\n\t\t\tconst hitlParameters = isRecord(parsed.data) ? parsed.data : invocation.parameters;\n\t\t\tconst approvalStore = asApprovalStore(options.store);\n\t\t\tif (!approvalStore) {\n\t\t\t\treturn fail(\n\t\t\t\t\tinvocation,\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t\"The configured HITL evaluator requires a store with approval persistence support.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!invocation.hitlRoute) {\n\t\t\t\tconst decision = await options.hitlEvaluator({\n\t\t\t\t\tactionId: action.actionId,\n\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\tactorType: invocation.actorType,\n\t\t\t\t\ttenantId,\n\t\t\t\t\tspaceId,\n\t\t\t\t\tparameters: hitlParameters,\n\t\t\t\t\t...(numberValue(hitlParameters.confidence) !== undefined\n\t\t\t\t\t\t? { confidence: numberValue(hitlParameters.confidence) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(isRiskTier(hitlParameters.riskTier)\n\t\t\t\t\t\t? { riskTier: hitlParameters.riskTier }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(stringValue(hitlParameters.agentSessionId)\n\t\t\t\t\t\t? { agentSessionId: stringValue(hitlParameters.agentSessionId) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(stringValue(hitlParameters.agentRunId)\n\t\t\t\t\t\t? { agentRunId: stringValue(hitlParameters.agentRunId) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t\tinvocation = await approvalStore.recordHitlDecision(\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\ttenantId,\n\t\t\t\t\tspaceId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...decision,\n\t\t\t\t\t\t...(options.hitlPolicyVersion\n\t\t\t\t\t\t\t? { policyVersion: options.hitlPolicyVersion }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tevaluatedAt: now(),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (invocation.hitlRoute === \"rejected\") {\n\t\t\t\treturn fail(\n\t\t\t\t\tinvocation,\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t`HITL rejected: ${invocation.hitlReason ?? \"no reason provided\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(invocation.hitlRoute === \"needs-approval\" ||\n\t\t\t\t\tinvocation.hitlRoute === \"escalate\") &&\n\t\t\t\t!invocation.approvalDecision?.approved\n\t\t\t) {\n\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\tstatus: \"waiting_for_approval\",\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...actionResult(invocation),\n\t\t\t\t\tstatus: \"waiting_for_approval\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst authorizationInput = toAuthorizationInput(action, invocation);\n\t\tconst executionReason = executionReasonOverride ??\n\t\t\t(invocation.attemptCount > 1 || (resumingRunningInvocation && invocation.attemptCount === 0)\n\t\t\t\t? \"recovery\"\n\t\t\t\t: invocation.executionReason ?? \"initial\");\n\t\tif (!(await options.authorization.checkEntitlement(authorizationInput))) {\n\t\t\treturn fail(\n\t\t\t\tinvocation,\n\t\t\t\t\"failed\",\n\t\t\t\t`Module \"${action.namespace}\" is no longer enabled for tenant ${tenantId}`,\n\t\t\t);\n\t\t}\n\t\tconst authorityMoment = action.execution?.authorityMoment;\n\t\tif (authorityMoment === \"capture\" && !invocation.authorizationBinding) {\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_missing_capture_evidence\" as const,\n\t\t\t\tgoverningMoment: authorityMoment,\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Action ${action.actionId} requires durable capture-time authorization evidence`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst bindingExpired = authorityMoment !== \"capture\" && invocation.authorizationBinding?.expiresAt !== undefined &&\n\t\t\tDate.parse(invocation.authorizationBinding.expiresAt) <= now().getTime();\n\t\tif (bindingExpired) {\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_expired\" as const,\n\t\t\t\tgoverningMoment: authorityMoment ?? \"both\",\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.authorizationBindingId ? { authorizationBindingId: invocation.authorizationBindingId } : {}),\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Authorization binding for action ${action.actionId} expired before execution`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst executionAuthorized = authorityMoment === \"capture\"\n\t\t\t? invocation.authorizationBinding !== undefined\n\t\t\t: options.authorization.authorizeExecution\n\t\t\t\t? await options.authorization.authorizeExecution({\n\t\t\t\t\t...authorizationInput,\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\tparameters: parsed.data,\n\t\t\t\t\tinvocation,\n\t\t\t\t\texecutionReason,\n\t\t\t\t})\n\t\t\t\t: await options.authorization.authorize(authorizationInput);\n\t\tif (!executionAuthorized) {\n\t\t\tif (!action.execution) {\n\t\t\t\treturn fail(invocation, \"failed\", `Actor ${invocation.actorId} is not authorized to execute action ${action.actionId}`);\n\t\t\t}\n\t\t\tconst reconciliation = {\n\t\t\t\tkind: \"authorization_denied\" as const,\n\t\t\t\tgoverningMoment: action.execution?.authorityMoment ?? \"both\",\n\t\t\t\texecutionReason,\n\t\t\t\t...(invocation.authorizationBindingId ? { authorizationBindingId: invocation.authorizationBindingId } : {}),\n\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\tmessage: `Actor ${invocation.actorId} is not authorized to execute action ${action.actionId}`,\n\t\t\t};\n\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: reconciliation.message, authorizationReconciliation: reconciliation });\n\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: reconciliation.message, reconciliation }, action.actionId);\n\t\t}\n\t\tconst definitions = options.resolvePolicies\n\t\t\t? await options.resolvePolicies({\n\t\t\t\t\t...authorizationInput,\n\t\t\t\t\tactionInvocationId,\n\t\t\t\t\tparameters: parsed.data,\n\t\t\t\t\tinvocation,\n\t\t\t\t\texecutionReason,\n\t\t\t\t\tdeclaredPolicyIds: action.policies ?? [],\n\t\t\t\t})\n\t\t\t: declaredPolicies(action.policies ?? []);\n\t\tconst outcomes = await evaluatePolicyDefinitions(definitions, {\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tactionInvocationId,\n\t\t\tactionId: action.actionId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tparameters: parsed.data,\n\t\t\tdb: options.store.db,\n\t\t\tservices: options.services,\n\t\t\tresolveCodePolicy: options.registry?.resolvePolicy,\n\t\t\tmode: \"execute\",\n\t\t\tnow: now(),\n\t\t});\n\t\tfor (const outcome of outcomes) {\n\t\t\tawait options.store.appendPolicyEvaluation({\n\t\t\t\tid: lifecycleId(\"pol\", actionInvocationId, outcome.policyId),\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\toutcome,\n\t\t\t\tcreatedAt: now(),\n\t\t\t});\n\t\t}\n\t\tconst aggregate = aggregatePolicyOutcomes(outcomes);\n\t\tif (aggregate?.result === \"block\") {\n\t\t\tconst reason = aggregate.reason ?? `Blocked by policy ${aggregate.policyId}`;\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"ComplianceBlocked\",\n\t\t\t\tsubjectType: \"ActionInvocation\",\n\t\t\t\tsubjectId: actionInvocationId,\n\t\t\t\tpayload: { actionId: action.actionId, policyId: aggregate.policyId, reason },\n\t\t\t}, `compliance:${aggregate.policyId}`);\n\t\t\treturn fail(invocation, \"blocked_by_policy\", reason);\n\t\t}\n\t\tif (options.resolvePolicyObligations) {\n\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\tif (!governanceStore) {\n\t\t\t\treturn fail(invocation, \"failed\", \"Policy obligations require a governance-capable store.\");\n\t\t\t}\n\t\t\tconst existing = await governanceStore.listPolicyObligations(actionInvocationId, tenantId, spaceId);\n\t\t\tif (existing.length === 0) {\n\t\t\t\tconst createdAt = now();\n\t\t\t\tconst obligations = await options.resolvePolicyObligations(outcomes);\n\t\t\t\tawait governanceStore.appendPolicyObligations(obligations.map((obligation) => ({\n\t\t\t\t\t...obligation, status: obligation.status ?? \"pending\", actionInvocationId,\n\t\t\t\t\ttenantId, spaceId, createdAt, updatedAt: createdAt,\n\t\t\t\t})));\n\t\t\t}\n\t\t}\n\n\t\tlet data: Record<string, unknown>;\n\t\tlet domainEvents: PendingAssetEvent[] = [];\n\t\ttry {\n\t\t\tconst runHandler = async (\n\t\t\t\tdb: TDb,\n\t\t\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t\t\t) => {\n\t\t\t\tif (options.outbox && !transaction?.appendEventWithOutbox) {\n\t\t\t\t\tthrow new Error(\"Outbox egress requires transactionWithEvents to provide appendEventWithOutbox before handler execution.\");\n\t\t\t\t}\n\t\t\t\tconst binding = action.stateMachine;\n\t\t\t\tif (binding) {\n\t\t\t\t\tconst machine = stateMachineResolver(binding.entityType);\n\t\t\t\t\tconst entityId = binding.getEntityId(parsed.data);\n\t\t\t\t\tconst getEntityState = transaction?.getEntityState\n\t\t\t\t\t\t? transaction.getEntityState.bind(transaction)\n\t\t\t\t\t\t: options.store.getEntityState.bind(options.store);\n\t\t\t\t\tconst currentState = entityId\n\t\t\t\t\t\t? ((await getEntityState(\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t\t)) ?? initialState(machine))\n\t\t\t\t\t\t: initialState(machine);\n\t\t\t\t\tconst targetState =\n\t\t\t\t\t\ttypeof binding.targetState === \"function\"\n\t\t\t\t\t\t\t? binding.targetState(parsed.data)\n\t\t\t\t\t\t\t: binding.targetState;\n\t\t\t\t\tif (targetState !== \"\") {\n\t\t\t\t\t\tconst transition = await evaluateStateMachineTransition(\n\t\t\t\t\t\t\tmachine,\n\t\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\t\tcurrentState,\n\t\t\t\t\t\t\ttargetState,\n\t\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tentity: {\n\t\t\t\t\t\t\t\t\t...(entityId ? { id: entityId } : {}),\n\t\t\t\t\t\t\t\t\tstate: currentState,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\t\t\t\tparameters: parsed.data,\n\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst replayingAppliedTransition = action.idempotent && currentState === targetState;\n\t\t\t\t\t\tif (!transition.valid && !replayingAppliedTransition) {\n\t\t\t\t\t\t\tthrow new Error(transition.error ?? \"Invalid state transition\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst handlerResult = action.handler\n\t\t\t\t\t? await action.handler(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tactorId: invocation.actorId,\n\t\t\t\t\t\t\t\tactorType: invocation.actorType,\n\t\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t\t\t\t\t\t\t...(invocation.provenance ? { provenance: invocation.provenance } : {}),\n\t\t\t\t\t\t\t\t...(isAdmissionTime(invocation.admittedAt) ? { admittedAt: invocation.admittedAt } : {}),\n\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\tservices: options.services,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tparsed.data,\n\t\t\t\t\t\t)\n\t\t\t\t\t: { success: true as const, data: {} };\n\t\t\t\tif (!handlerResult.success) {\n\t\t\t\t\tthrow new Error(handlerResult.error ?? \"Action handler failed\");\n\t\t\t\t}\n\t\t\t\tconst handlerData = handlerResult.data ?? {};\n\t\t\t\tif (action.resultSchema) {\n\t\t\t\t\tconst publicResult = withoutPrivateHostFields(handlerData, eventResultFields);\n\t\t\t\t\tconst parsedResult = action.resultSchema.safeParse(publicResult);\n\t\t\t\t\tif (!parsedResult.success) {\n\t\t\t\t\t\tthrow new Error(`Action result validation failed at ${parsedResult.error.issues\n\t\t\t\t\t\t\t.map((issue) => issue.path.map(String).join(\".\") || \"result\")\n\t\t\t\t\t\t\t.join(\", \")}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst events = extractEvents(handlerData);\n\t\t\t\tconst undeclaredEvent = events.find(\n\t\t\t\t\t(event) => !action.emitsEvents.includes(event.eventType),\n\t\t\t\t);\n\t\t\t\tif (undeclaredEvent) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${action.actionId} emitted undeclared event type ${undeclaredEvent.eventType}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (action.eventPhase !== \"after_adapters\") {\n\t\t\t\t\tfor (const [index, event] of events.entries()) {\n\t\t\t\t\t\tawait appendEvent(\n\t\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t`domain:${index}`,\n\t\t\t\t\t\t\taction.version,\n\t\t\t\t\t\t\ttransaction,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { data: handlerData, domainEvents: events };\n\t\t\t};\n\t\t\tconst atomicStore = asAtomicMutationStore(options.store);\n\t\t\tconst executed = atomicStore\n\t\t\t\t? await atomicStore.transactionWithEvents((transaction) =>\n\t\t\t\t\t\trunHandler(transaction.db, transaction),\n\t\t\t\t\t)\n\t\t\t\t: await options.store.transaction((db) => runHandler(db));\n\t\t\tdata = executed.data;\n\t\t\tdomainEvents = executed.domainEvents;\n\t\t} catch (error) {\n\t\t\treturn fail(invocation, \"failed\", errorMessage(error));\n\t\t}\n\n\t\t// At most one adapter step may hand the work off to finish elsewhere. Two\n\t\t// would leave the invocation waiting on two references with one status.\n\t\t// A handoff is persisted the moment it is accepted, before the step is\n\t\t// marked done, so a crash between the two leaves the handoff and not\n\t\t// the marker: on re-execution the step is skipped and the handoff kept.\n\t\tlet pendingHandoff: PendingExternalCompletion | undefined = invocation.pendingCompletion;\n\t\tfor (const [stepIndex, step] of (action.adapterSteps ?? []).entries()) {\n\t\t\tconst input = step.getInput(parsed.data, data);\n\t\t\tif (!input) continue;\n\t\t\tconst adapter = adapters.require(step.adapterType, step.operation);\n\t\t\tconst adapterInvocationId = lifecycleId(\"adp\", actionInvocationId, String(stepIndex));\n\t\t\tconst previousAdapterInvocation = await options.store.getAdapterInvocation(\n\t\t\t\tadapterInvocationId,\n\t\t\t);\n\t\t\tif (previousAdapterInvocation?.status === \"succeeded\") continue;\n\t\t\tif (pendingHandoff?.adapterInvocationId === adapterInvocationId) {\n\t\t\t\t// The handoff was durably accepted; only the marker was lost, and\n\t\t\t\t// with it whatever came after the persist. Replay the events by\n\t\t\t\t// their stable ids so consumers hear about the handoff exactly\n\t\t\t\t// once; the adapter's output is gone with the dead worker.\n\t\t\t\tconst subject = options.adapterEventSubject?.(action.actionId, parsed.data, data)\n\t\t\t\t\t?? { subjectType: \"AdapterInvocation\", subjectId: adapterInvocationId };\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, { status: \"succeeded\", updatedAt: now() });\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"ExternalOperationAccepted\",\n\t\t\t\t\tsubjectType: subject.subjectType,\n\t\t\t\t\tsubjectId: subject.subjectId,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\texternalReference: pendingHandoff.externalReference,\n\t\t\t\t\t\t...(pendingHandoff.dueAt ? { dueAt: pendingHandoff.dueAt.toISOString() } : {}),\n\t\t\t\t\t},\n\t\t\t\t}, `adapter:${stepIndex}:accepted`);\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"AdapterInvocationSucceeded\",\n\t\t\t\t\tsubjectType: subject.subjectType,\n\t\t\t\t\tsubjectId: subject.subjectId,\n\t\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation, recovered: true },\n\t\t\t\t}, `adapter:${stepIndex}:succeeded`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst adapterEventSubject = options.adapterEventSubject?.(\n\t\t\t\taction.actionId,\n\t\t\t\tparsed.data,\n\t\t\t\tdata,\n\t\t\t) ?? { subjectType: \"AdapterInvocation\", subjectId: adapterInvocationId };\n\t\t\tconst recordedInput = options.redactAdapterInput\n\t\t\t\t? options.redactAdapterInput(\n\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\tstep.adapterType,\n\t\t\t\t\t\tstep.operation,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t)\n\t\t\t\t: input;\n\t\t\tconst startedAt = now();\n\t\t\tconst record: AdapterInvocationRecord = {\n\t\t\t\tid: adapterInvocationId,\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\tadapterType: step.adapterType,\n\t\t\t\toperation: step.operation,\n\t\t\t\tvendor: adapter.vendor,\n\t\t\t\tstatus: \"running\",\n\t\t\t\tinput: recordedInput,\n\t\t\t\tattempt: 1,\n\t\t\t\tcreatedAt: startedAt,\n\t\t\t\tupdatedAt: startedAt,\n\t\t\t};\n\t\t\tawait options.store.createAdapterInvocation(record);\n\t\t\tawait appendEvent(invocation, {\n\t\t\t\teventType: \"AdapterInvocationStarted\",\n\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t}, `adapter:${stepIndex}:started`);\n\t\t\tlet adapterDeadlineTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t\ttry {\n\t\t\t\tconst adapterController = options.adapterDeadlineMs\n\t\t\t\t\t? new AbortController()\n\t\t\t\t\t: undefined;\n\t\t\t\tconst deadlineMs = options.adapterDeadlineMs\n\t\t\t\t\t? now().getTime() + options.adapterDeadlineMs\n\t\t\t\t\t: undefined;\n\t\t\t\tif (adapterController && deadlineMs) {\n\t\t\t\t\tconst remaining = deadlineMs - now().getTime();\n\t\t\t\t\tif (remaining <= 0) {\n\t\t\t\t\t\tthrow new Error(`Adapter deadline already expired before execution: ${step.adapterType}:${step.operation}`);\n\t\t\t\t\t}\n\t\t\t\t\tadapterDeadlineTimer = setTimeout(\n\t\t\t\t\t\t() => adapterController.abort(new Error(\"Adapter deadline exceeded\")),\n\t\t\t\t\t\tremaining,\n\t\t\t\t\t);\n\t\t\t\t\tadapterDeadlineTimer.unref?.();\n\t\t\t\t}\n\t\t\t\tconst circuitBreaker = circuitBreakers.forAdapter(adapter);\n\t\t\t\tconst result = await executeWithAdapterRetry({\n\t\t\t\t\t...(circuitBreaker ? { circuitBreaker } : {}),\n\t\t\t\t\tpolicy: step.retryPolicy ?? adapter.retryPolicy,\n\t\t\t\t\tdefaultIdempotent: adapter.idempotent,\n\t\t\t\t\t// Every await before the call happens here, before breaker\n\t\t\t\t\t// admission, so nothing awaits between admission and the adapter.\n\t\t\t\t\tprepareAttempt: async (attempt) => {\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\texecute: (attempt, maxAttempts) => {\n\t\t\t\t\t\treturn adapter.execute(input, {\n\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t\t\t\t\t...(invocation.causationId\n\t\t\t\t\t\t\t\t? { causationId: invocation.causationId }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t\t...(deadlineMs ? { deadlineMs } : {}),\n\t\t\t\t\t\t\t...(adapterController ? { signal: adapterController.signal } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tisSuccessful: (result) => result.success,\n\t\t\t\t\tgetError: (result) => result.error,\n\t\t\t\t\tclassifyOutcome: (result) => result.outcome ?? \"transient_failure\",\n\t\t\t\t\tclassifyThrownError: (error) => {\n\t\t\t\t\t\t// A refused call never ran: a definite non-effect, not a timeout.\n\t\t\t\t\t\tif (isAdapterCircuitOpenError(error)) return \"transient_failure\";\n\t\t\t\t\t\tif (adapterController?.signal.aborted) return \"timeout\";\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tif (/timeout|deadline|timed?\\s*out/i.test(message)) return \"timeout\";\n\t\t\t\t\t\treturn \"transient_failure\";\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tassertAdapterOutcomeConsistency(result as import(\"@fabricorg/platform\").AdapterExecutionResult);\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tconst outcome = result.outcome ?? \"transient_failure\";\n\t\t\t\t\tif (outcome === \"ambiguous\") {\n\t\t\t\t\t\tconst evidence = result.outcomeEvidence;\n\t\t\t\t\t\tconst message = result.error ?? \"Adapter outcome is ambiguous; external effect may or may not have been applied\";\n\t\t\t\t\t\tconst adapterReconciliation: AdapterReconciliationOutcome = {\n\t\t\t\t\t\t\tkind: \"adapter_outcome_ambiguous\",\n\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\tvendor: adapter.vendor,\n\t\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\t\t...(evidence?.reason ?? result.error ? { reason: evidence?.reason ?? result.error } : {}),\n\t\t\t\t\t\t\t...(evidence?.externalReference ? { externalReference: evidence.externalReference } : {}),\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\t\tstatus: \"ambiguous\",\n\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\t\teventType: \"AdapterInvocationAmbiguous\",\n\t\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\t\t...(evidence?.externalReference ? { externalReference: evidence.externalReference } : {}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, `adapter:${stepIndex}:ambiguous`);\n\t\t\t\t\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\t\t\t\t\tif (governanceStore && evidence) {\n\t\t\t\t\t\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\t\t\t\t\t\tid: lifecycleId(\"rec\", actionInvocationId, `${adapter.vendor}:${adapterInvocationId}`),\n\t\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\t\tprovider: adapter.vendor,\n\t\t\t\t\t\t\t\t...(evidence.externalReference ? { externalOperationId: evidence.externalReference } : {}),\n\t\t\t\t\t\t\t\tattempt: 1,\n\t\t\t\t\t\t\t\treason: message,\n\t\t\t\t\t\t\t\tobservedAt: now(),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\t\t\tstatus: \"reconciliation_required\",\n\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\tadapterReconciliation,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn withConsistency(\n\t\t\t\t\t\t\t{ actionInvocationId, status: \"reconciliation_required\" as const, error: message, adapterReconciliation },\n\t\t\t\t\t\t\taction.actionId,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: result.error ?? \"Adapter failed\",\n\t\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t\t});\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"AdapterInvocationFailed\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: { adapterType: step.adapterType, operation: step.operation },\n\t\t\t\t\t}, `adapter:${stepIndex}:failed`);\n\t\t\t\t\treturn fail(invocation, \"failed\", result.error ?? \"Adapter failed\");\n\t\t\t\t}\n\t\t\t\tconst resultRecord = result as unknown as Record<string, unknown>;\n\t\t\t\tconst output = isRecord(resultRecord.output)\n\t\t\t\t\t? resultRecord.output\n\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(resultRecord).filter(\n\t\t\t\t\t\t\t\t([key]) => key !== \"success\" && key !== \"error\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\tconst handoff = (result as import(\"@fabricorg/platform\").AdapterExecutionResult).acceptedExternalOperation;\n\t\t\t\tif (handoff) {\n\t\t\t\t\tconst reference = typeof handoff.externalReference === \"string\" ? handoff.externalReference.trim() : \"\";\n\t\t\t\t\tif (reference === \"\") {\n\t\t\t\t\t\t// The effect is in flight and nothing can ever complete it.\n\t\t\t\t\t\tconst message = `Adapter ${step.adapterType}:${step.operation} accepted an external operation without a reference to complete it by; the external effect may be in flight.`;\n\t\t\t\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\t\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error: message }, action.actionId);\n\t\t\t\t\t}\n\t\t\t\t\tconst acceptedAt = now();\n\t\t\t\t\tconst deadlineMs = action.execution?.completionDeadlineMs;\n\t\t\t\t\tconst accepted: PendingExternalCompletion = {\n\t\t\t\t\t\tprovider: adapter.vendor,\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\tadapterInvocationId,\n\t\t\t\t\t\texternalReference: reference,\n\t\t\t\t\t\tacceptedAt,\n\t\t\t\t\t\t...(deadlineMs ? { dueAt: new Date(acceptedAt.getTime() + deadlineMs) } : {}),\n\t\t\t\t\t};\n\t\t\t\t\tconst completion = action.execution?.completion ?? \"immediate\";\n\t\t\t\t\tconst refuse = completion === \"immediate\"\n\t\t\t\t\t\t? `Adapter ${step.adapterType}:${step.operation} handed off external operation \"${reference}\" but ${action.actionId} declares immediate completion; the external effect may be in flight.`\n\t\t\t\t\t\t: pendingHandoff\n\t\t\t\t\t\t\t? `Adapter ${step.adapterType}:${step.operation} handed off a second external operation \"${reference}\" while \"${pendingHandoff.externalReference}\" is already pending; one invocation waits on one completion.`\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (refuse) {\n\t\t\t\t\t\t// The handoff already happened, so this is not a clean failure:\n\t\t\t\t\t\t// somebody has to look, with the reference in hand. The first\n\t\t\t\t\t\t// reference is kept on the invocation so its callback can still\n\t\t\t\t\t\t// land as evidence; the refused one goes to the reconciliation\n\t\t\t\t\t\t// log. The invocation is written first: if the log is not\n\t\t\t\t\t\t// there, the reference must not go with it.\n\t\t\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, { status: \"succeeded\", output, updatedAt: now() });\n\t\t\t\t\t\tawait persistInvocation(invocation, {\n\t\t\t\t\t\t\tstatus: \"reconciliation_required\",\n\t\t\t\t\t\t\terror: refuse,\n\t\t\t\t\t\t\t...(pendingHandoff ? {} : { pendingCompletion: accepted }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlet error = refuse;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait externalCompletion.recordCompletionReconciliation(invocation, { externalReference: reference, provider: adapter.vendor }, refuse);\n\t\t\t\t\t\t} catch (logError) {\n\t\t\t\t\t\t\t// The lease is already gone with the terminal status above, so\n\t\t\t\t\t\t\t// this write must not fence on it.\n\t\t\t\t\t\t\terror = `${refuse} Reconciliation log unavailable: ${errorMessage(logError)}`;\n\t\t\t\t\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { error });\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn withConsistency({\n\t\t\t\t\t\t\tactionInvocationId, status: \"reconciliation_required\" as const, error,\n\t\t\t\t\t\t\t...(pendingHandoff ? { pendingCompletion: pendingHandoff } : { pendingCompletion: accepted }),\n\t\t\t\t\t\t}, action.actionId);\n\t\t\t\t\t}\n\t\t\t\t\tpendingHandoff = accepted;\n\t\t\t\t\t// Durable before the step is marked done: see the note above the loop.\n\t\t\t\t\tawait persistInvocation(invocation, { pendingCompletion: accepted });\n\t\t\t\t\tinvocation = { ...invocation, pendingCompletion: accepted };\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"ExternalOperationAccepted\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\texternalReference: reference,\n\t\t\t\t\t\t\t...(accepted.dueAt ? { dueAt: accepted.dueAt.toISOString() } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}, `adapter:${stepIndex}:accepted`);\n\t\t\t\t}\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"succeeded\",\n\t\t\t\t\toutput,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\tif (options.extractExecutionAttestation) {\n\t\t\t\t\tconst attestation = await options.extractExecutionAttestation({\n\t\t\t\t\t\tactionInvocationId, adapterInvocationId, adapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation, vendor: adapter.vendor, input: recordedInput,\n\t\t\t\t\t\tstartedAt, completedAt: now(), output,\n\t\t\t\t\t});\n\t\t\t\t\tif (attestation) {\n\t\t\t\t\t\tawait recordExecutionAttestation(actionInvocationId, tenantId, spaceId, attestation, adapterInvocationId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\teventType: \"AdapterInvocationSucceeded\",\n\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\tinput: recordedInput,\n\t\t\t\t\t\toutput,\n\t\t\t\t\t},\n\t\t\t\t}, `adapter:${stepIndex}:succeeded`);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = errorMessage(error);\n\t\t\t\tawait options.store.updateAdapterInvocation(adapterInvocationId, {\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: message,\n\t\t\t\t\tupdatedAt: now(),\n\t\t\t\t});\n\t\t\t\tif (isAdapterCircuitOpenError(error)) {\n\t\t\t\t\t// The breaker refused the call before the adapter ran, so no\n\t\t\t\t\t// external effect happened: a definite transient failure, recorded\n\t\t\t\t\t// like an unsuccessful adapter result, never as reconciliation.\n\t\t\t\t\tawait appendEvent(invocation, {\n\t\t\t\t\t\teventType: \"AdapterInvocationFailed\",\n\t\t\t\t\t\tsubjectType: adapterEventSubject.subjectType,\n\t\t\t\t\t\tsubjectId: adapterEventSubject.subjectId,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tadapterType: step.adapterType,\n\t\t\t\t\t\t\toperation: step.operation,\n\t\t\t\t\t\t\treason: \"circuit_open\",\n\t\t\t\t\t\t\t...(error.retryAfterMs !== undefined ? { retryAfterMs: error.retryAfterMs } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}, `adapter:${stepIndex}:failed`);\n\t\t\t\t}\n\t\t\t\treturn fail(invocation, \"failed\", message);\n\t\t\t} finally {\n\t\t\t\tif (adapterDeadlineTimer) clearTimeout(adapterDeadlineTimer);\n\t\t\t}\n\t\t}\n\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (governanceStore && options.resolvePolicyObligations) {\n\t\t\tconst obligations = await governanceStore.listPolicyObligations(actionInvocationId, tenantId, spaceId);\n\t\t\tconst unsatisfied = obligations.filter((obligation) => (obligation.required ?? true) && obligation.status !== \"satisfied\" && obligation.status !== \"waived\");\n\t\t\tif (unsatisfied.length > 0) {\n\t\t\t\tconst message = `Unsatisfied policy obligations: ${unsatisfied.map((item) => item.id).join(\", \")}`;\n\t\t\t\tif (pendingHandoff) {\n\t\t\t\t\t// The external effect is in flight and the evidence that would\n\t\t\t\t\t// have satisfied these may have died with a worker; somebody\n\t\t\t\t\t// has to look rather than the row saying it failed cleanly.\n\t\t\t\t\tawait persistInvocation(invocation, { status: \"reconciliation_required\", error: message });\n\t\t\t\t\tlet error = message;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait externalCompletion.recordCompletionReconciliation(invocation, { externalReference: pendingHandoff.externalReference, provider: pendingHandoff.provider, kind: \"obligations\" }, message);\n\t\t\t\t\t} catch (logError) {\n\t\t\t\t\t\terror = `${message} Reconciliation log unavailable: ${errorMessage(logError)}`;\n\t\t\t\t\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { error });\n\t\t\t\t\t}\n\t\t\t\t\treturn withConsistency({ actionInvocationId, status: \"reconciliation_required\" as const, error, pendingCompletion: pendingHandoff }, action.actionId);\n\t\t\t\t}\n\t\t\t\treturn fail(invocation, \"failed\", message);\n\t\t\t}\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data, eventResultFields);\n\t\t// A handoff leaves the invocation running, without a lease, until the\n\t\t// external system completes it by reference. Domain events still go out\n\t\t// now: the handler's writes committed, and what is pending is the\n\t\t// external outcome, not the domain state.\n\t\tconst parked: PendingExternalCompletion | undefined = pendingHandoff ? { ...pendingHandoff, parkedAt: now() } : undefined;\n\t\tconst finalPatch: ActionInvocationPatch = parked\n\t\t\t? { status: \"running\", result, pendingCompletion: parked }\n\t\t\t: { status: \"completed\", result };\n\t\ttry {\n\t\t\tconst atomicStore = asAtomicMutationStore(options.store);\n\t\t\tif (action.eventPhase === \"after_adapters\" && atomicStore) {\n\t\t\t\tawait atomicStore.transactionWithEvents(async (transaction) => {\n\t\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\t\tawait appendEvent(\n\t\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t`domain:${index}`,\n\t\t\t\t\t\t\taction.version,\n\t\t\t\t\t\t\ttransaction,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (invocation.leaseOwner && invocation.leaseToken !== undefined) {\n\t\t\t\t\t\tif (!transaction.updateLeasedActionInvocation) {\n\t\t\t\t\t\t\tthrow new Error(\"Leased atomic finalization requires transaction-scoped fencing support.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst updated = await transaction.updateLeasedActionInvocation({\n\t\t\t\t\t\t\tid: actionInvocationId, tenantId, spaceId,\n\t\t\t\t\t\t\tworkerId: invocation.leaseOwner, leaseToken: invocation.leaseToken,\n\t\t\t\t\t\t\tpatch: finalPatch,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!updated) throw new RecoverableFinalizationError(`Invocation lease lost: ${actionInvocationId}`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait transaction.updateActionInvocation(\n\t\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t\tfinalPatch,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!pendingHandoff) {\n\t\t\t\t\temitInvocationStatusTelemetry(\n\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\t\"completed\",\n\t\t\t\t\t\toptions.telemetry,\n\t\t\t\t\t\tnow(),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (action.eventPhase === \"after_adapters\") {\n\t\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait persistInvocation(invocation, finalPatch);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (action.eventPhase === \"after_adapters\") {\n\t\t\t\tthrow new RecoverableFinalizationError(errorMessage(error));\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tactionInvocationId,\n\t\t\tstatus: parked ? \"running\" : \"completed\",\n\t\t\tresult,\n\t\t\t...(parked ? { pendingCompletion: parked } : {}),\n\t\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t};\n\t\t} catch (error) {\n\t\t\tif (error instanceof RecoverableFinalizationError) throw error;\n\t\t\treturn fail(invocation, \"failed\", errorMessage(error));\n\t\t}\n\t}\n\n\tasync function resumeApprovedInvocation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: ActionApprovalDecision,\n\t): Promise<ExecuteActionResult> {\n\t\tif (!decision.approverId.trim()) throw new Error(\"approverId is required\");\n\t\tconst invocation = await options.store.getActionInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tif (isTerminal(invocation.status)) return withConsistency(actionResult(invocation), invocation.actionId);\n\t\tif (invocation.status !== \"waiting_for_approval\") {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Invocation is not waiting for approval (status: ${invocation.status})`,\n\t\t\t};\n\t\t}\n\t\tconst action = actionResolver(invocation.actionId);\n\t\tif (!action) return fail(invocation, \"failed\", `Unknown action: ${invocation.actionId}`);\n\t\tconst approvalAuthorizationInput = toAuthorizationInput(action, {\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tactorId: decision.approverId,\n\t\t\tactorType: decision.approverType,\n\t\t});\n\t\tconst entitled = await options.authorization.checkEntitlement(\n\t\t\tapprovalAuthorizationInput,\n\t\t);\n\t\tconst authorized = options.authorization.authorizeApproval\n\t\t\t? await options.authorization.authorizeApproval({\n\t\t\t\t\t...approvalAuthorizationInput,\n\t\t\t\t\tdecision,\n\t\t\t\t})\n\t\t\t: await options.authorization.authorize(approvalAuthorizationInput);\n\t\tif (!entitled || !authorized) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Actor ${decision.approverId} is not authorized to decide this approval`,\n\t\t\t};\n\t\t}\n\t\tconst approvalStore = asApprovalStore(options.store);\n\t\tif (!approvalStore) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: \"Approval resume requires a store with approval persistence support.\",\n\t\t\t};\n\t\t}\n\t\tconst transitionStartedAt = now();\n\t\tconst decidedAt = decision.decidedAt ?? transitionStartedAt;\n\t\tconst leaseOwner = `approval-resume-${createFabricId(\"lease\")}`;\n\t\tconst transition = await approvalStore.beginApprovalDecision({\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\tdecision: { ...decision, decidedAt },\n\t\t\tleaseOwner,\n\t\t\tleaseDurationMs: options.approvalResumeLeaseDurationMs ?? 5 * 60_000,\n\t\t\tnow: transitionStartedAt,\n\t\t});\n\t\tconst transitioned =\n\t\t\ttransition.invocation ??\n\t\t\t(await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId));\n\t\tif (!transition.applied || !transitioned) {\n\t\t\tif (!transitioned) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\t\treturn withConsistency(actionResult(transitioned), transitioned.actionId);\n\t\t}\n\t\tif (!decision.approved) {\n\t\t\temitInvocationStatusTelemetry(\n\t\t\t\ttransitioned,\n\t\t\t\t\"failed\",\n\t\t\t\toptions.telemetry,\n\t\t\t\tnow(),\n\t\t\t\t\"waiting_for_approval\",\n\t\t\t);\n\t\t\treturn withConsistency(actionResult(transitioned), transitioned.actionId);\n\t\t}\n\t\treturn executeInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\t{ leaseOwner, leaseToken: transitioned.leaseToken },\n\t\t\t\"approval_resume\",\n\t\t);\n\t}\n\n\tasync function recordExecutionAttestation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tattestation: ExecutionAttestation,\n\t\tadapterInvocationId?: string,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"Execution attestations require a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tconst id = lifecycleId(\"att\", actionInvocationId, adapterInvocationId ?? `${attestation.provider}:${attestation.operation}:${attestation.externalOperationId ?? \"external\"}`);\n\t\tawait governanceStore.appendExecutionAttestation({\n\t\t\t...attestation, id, actionInvocationId, tenantId, spaceId,\n\t\t\t...(adapterInvocationId ? { adapterInvocationId } : {}), recordedAt: now(),\n\t\t});\n\t\tfor (const obligationId of attestation.satisfiesObligations ?? []) {\n\t\t\tawait governanceStore.updatePolicyObligation(actionInvocationId, obligationId, \"satisfied\", attestation.evidenceReferences);\n\t\t}\n\t}\n\n\tasync function recordExternalReconciliation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\treconciliation: ExternalReconciliation,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"External reconciliation requires a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\t...reconciliation,\n\t\t\tid: lifecycleId(\"rec\", actionInvocationId, `${reconciliation.provider}:${reconciliation.attempt}`),\n\t\t\tactionInvocationId, tenantId, spaceId,\n\t\t});\n\t}\n\n\t/** Consistency is a property of the action, not of the invocation, so it is read rather than stored. */\n\tfunction declaredConsistency(actionId: ActionId): \"authoritative-now\" | \"provisional-until-reconciled\" | undefined {\n\t\treturn actionResolver(actionId)?.execution?.consistency;\n\t}\n\n\t/**\n\t * Decorates every result leaving the Host, not only a freshly executed one, so an\n\t * idempotent replay reports the same consistency as the original submission.\n\t */\n\tfunction withConsistency<TResult extends { actionInvocationId: string }>(result: TResult, actionId: ActionId): TResult {\n\t\tconst consistency = declaredConsistency(actionId);\n\t\treturn consistency ? { ...result, consistency } : result;\n\t}\n\n\tasync function appendEvent(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\tactionId: ActionId;\n\t\t\tactionVersion: number;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\tactorId: string;\n\t\t\tactorType: string;\n\t\t\tcorrelationId: string;\n\t\t\tcausationId?: string;\n\t\t\tprovenance?: ActionInvocationRecord[\"provenance\"];\n\t\t},\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion = 1,\n\t\ttransaction?: PlatformHostMutationTransaction<TDb>,\n\t): Promise<void> {\n\t\tconst timestamp = now();\n\t\tconst envelope: AssetEventEnvelope = {\n\t\t\tid: lifecycleId(\"evt\", invocation.id, deduplicationKey),\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\teventType: event.eventType,\n\t\t\teventSchemaVersion: event.eventSchemaVersion ?? defaultEventSchemaVersion,\n\t\t\tsubjectType: event.subjectType,\n\t\t\tsubjectId: event.subjectId,\n\t\t\tactorId: invocation.actorId,\n\t\t\tactorType: invocation.actorType,\n\t\t\tactionInvocationId: invocation.id,\n\t\t\tpayload: event.payload,\n\t\t\tsequence: await (transaction ?? options.store).nextEventSequence(\n\t\t\t\tinvocation.tenantId,\n\t\t\t\tinvocation.spaceId,\n\t\t\t),\n\t\t\toccurredAt: timestamp,\n\t\t\trecordedAt: timestamp,\n\t\t\tcorrelationId: invocation.correlationId,\n\t\t\t...(invocation.causationId ? { causationId: invocation.causationId } : {}),\n\t\t\t...(invocation.provenance ? { provenance: { source: invocation.provenance.source, ...(invocation.provenance.auditAttributes ? { auditAttributes: invocation.provenance.auditAttributes } : {}) } } : {}),\n\t\t\t...(declaredConsistency(invocation.actionId) === \"provisional-until-reconciled\" ? { consistency: \"provisional-until-reconciled\" as const } : {}),\n\t\t};\n\t\tif (options.outbox) {\n\t\t\tconst hostLifecycleEvent = new Set([\"AdapterInvocationStarted\", \"AdapterInvocationSucceeded\", \"AdapterInvocationFailed\", \"ExternalOperationAccepted\", \"ExternalOperationCompleted\", \"ExternalOperationFailed\", \"ExternalOperationContradicted\", \"ComplianceBlocked\"]).has(envelope.eventType);\n\t\t\tconst shouldPublish = options.outbox.shouldPublish?.(envelope) ?? !hostLifecycleEvent;\n\t\t\tif (!shouldPublish) {\n\t\t\t\tawait (transaction ?? options.store).appendEvent(envelope);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst traceContext = options.outbox.traceContext?.(envelope);\n\t\t\tconst payloadClassification = options.outbox.classifyPayload(envelope);\n\t\t\tconst metadata = {\n\t\t\t\tproducerModuleVersion: options.outbox.producerModuleVersion(invocation.actionId, invocation.actionVersion),\n\t\t\t\tpayloadClassification,\n\t\t\t\tincludeProvenance: options.outbox.includeProvenance?.(envelope, payloadClassification) ?? payloadClassification !== \"restricted\",\n\t\t\t\t// Actor identity is excluded for every classification unless the application opts in.\n\t\t\t\tincludeActor: options.outbox.includeActor?.(envelope, payloadClassification) === true,\n\t\t\t\t...(traceContext ? { traceContext } : {}),\n\t\t\t};\n\t\t\tif (transaction) {\n\t\t\t\tif (!transaction.appendEventWithOutbox) throw new Error(\"Outbox egress requires an atomic transaction with appendEventWithOutbox.\");\n\t\t\t\tawait transaction.appendEventWithOutbox(envelope, metadata);\n\t\t\t} else {\n\t\t\t\tconst outboxStore = asOutboxStore(options.store);\n\t\t\t\tif (!outboxStore) throw new Error(\"Outbox egress requires an outbox-capable Platform Host store.\");\n\t\t\t\tawait outboxStore.appendEventWithOutbox(envelope, metadata);\n\t\t\t}\n\t\t} else {\n\t\t\tawait (transaction ?? options.store).appendEvent(envelope);\n\t\t}\n\t}\n\n\tasync function fail(\n\t\tinvocation: {\n\t\t\tid: string;\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\thitlRoute?: ActionInvocationRecord[\"hitlRoute\"];\n\t\t\thitlRiskTier?: ActionInvocationRecord[\"hitlRiskTier\"];\n\t\t},\n\t\tstatus: Extract<ActionStatus, \"failed\" | \"blocked_by_policy\" | \"validation_failed\">,\n\t\terror: string,\n\t): Promise<ExecuteActionResult> {\n\t\tawait persistInvocation(invocation as ActionInvocationRecord, { status, error });\n\t\treturn {\n\t\t\tactionInvocationId: invocation.id,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t};\n\t}\n\n\tasync function persistInvocation(\n\t\tinvocation: ActionInvocationRecord,\n\t\tpatch: import(\"./types\").ActionInvocationPatch,\n\t): Promise<void> {\n\t\tconst previousStatus = invocation.status;\n\t\tif (invocation.leaseOwner && invocation.leaseToken !== undefined) {\n\t\t\tconst recoverable = options.store as Partial<RecoverablePlatformHostStore<TDb>>;\n\t\t\tif (!recoverable.updateLeasedActionInvocation) {\n\t\t\t\tthrow new Error(\"Leased execution requires a fencing-capable PlatformHostStore.\");\n\t\t\t}\n\t\t\tconst updated = await recoverable.updateLeasedActionInvocation({\n\t\t\t\tid: invocation.id,\n\t\t\t\ttenantId: invocation.tenantId,\n\t\t\t\tspaceId: invocation.spaceId,\n\t\t\t\tworkerId: invocation.leaseOwner,\n\t\t\t\tleaseToken: invocation.leaseToken,\n\t\t\t\tpatch,\n\t\t\t});\n\t\t\tif (!updated) throw new RecoverableFinalizationError(`Invocation lease lost: ${invocation.id}`);\n\t\t\temitInvocationStatusTelemetry(invocation, patch.status, options.telemetry, now(), previousStatus);\n\t\t\treturn;\n\t\t}\n\t\tawait options.store.updateActionInvocation(\n\t\t\tinvocation.id,\n\t\t\tinvocation.tenantId,\n\t\t\tinvocation.spaceId,\n\t\t\tpatch,\n\t\t);\n\t\temitInvocationStatusTelemetry(invocation, patch.status, options.telemetry, now(), previousStatus);\n\t}\n\n\tconst externalCompletion = createExternalCompletionLifecycle<TDb>({\n\t\tstore: options.store,\n\t\ttelemetry: options.telemetry,\n\t\teventResultFields,\n\t\tnow,\n\t\tactionResolver,\n\t\tappendEvent,\n\t\tpersistInvocation,\n\t\tactionResult,\n\t\twithConsistency,\n\t});\n\n\treturn {\n\t\tsubmitAction,\n\t\texecuteInvocation,\n\t\tresumeApprovedInvocation,\n\t\trecordExecutionAttestation,\n\t\trecordExternalReconciliation,\n\t\tcompleteExternalInvocation: externalCompletion.completeExternalInvocation,\n\t\treconcileOverdueCompletions: externalCompletion.reconcileOverdueCompletions,\n\t\trequeueOutboxDeadLetter: createOutboxRequeue<TDb>({\n\t\t\tstore: options.store,\n\t\t\tauthorization: options.authorization,\n\t\t\ttelemetry: options.telemetry,\n\t\t\tnow,\n\t\t}),\n\t};\n}\n\nfunction actionResult(invocation: ActionInvocationRecord): ExecuteActionResult {\n\treturn {\n\t\tactionInvocationId: invocation.id,\n\t\tstatus: invocation.status,\n\t\tresult: invocation.result,\n\t\t...(invocation.error ? { error: invocation.error } : {}),\n\t\t...(invocation.hitlRoute ? { hitlRoute: invocation.hitlRoute } : {}),\n\t\t...(invocation.hitlRiskTier ? { hitlRiskTier: invocation.hitlRiskTier } : {}),\n\t\t...(invocation.authorizationReconciliation ? { reconciliation: invocation.authorizationReconciliation } : {}),\n\t\t...(invocation.adapterReconciliation ? { adapterReconciliation: invocation.adapterReconciliation } : {}),\n\t\t...(invocation.pendingCompletion ? { pendingCompletion: invocation.pendingCompletion } : {}),\n\t};\n}\n\nfunction asApprovalStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): ApprovalPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<ApprovalPlatformHostStore<TDb>>;\n\treturn typeof candidate.recordHitlDecision === \"function\" &&\n\t\ttypeof candidate.beginApprovalDecision === \"function\"\n\t\t? (store as ApprovalPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nfunction asOutboxStore<TDb>(\n\tstore: PlatformHostOptions<TDb>[\"store\"],\n): OutboxPlatformHostStore<TDb> | undefined {\n\tconst candidate = store as Partial<OutboxPlatformHostStore<TDb>>;\n\treturn typeof candidate.appendEventWithOutbox === \"function\" &&\n\t\ttypeof candidate.claimOutbox === \"function\"\n\t\t? (store as OutboxPlatformHostStore<TDb>)\n\t\t: undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction isRiskTier(value: unknown): value is \"low\" | \"medium\" | \"high\" {\n\treturn value === \"low\" || value === \"medium\" || value === \"high\";\n}\n\nfunction toAuthorizationInput<TDb>(\n\taction: ActionDefinition<TDb>,\n\tinput: {\n\t\ttenantId: string;\n\t\tspaceId: string;\n\t\tactorId: string;\n\t\tactorType: import(\"@fabricorg/platform\").ActorType;\n\t},\n): ActionAuthorizationInput {\n\treturn {\n\t\tactionId: action.actionId,\n\t\tnamespace: action.namespace,\n\t\trequiredPermissions: action.requiredPermissions ?? [],\n\t\trequiredRoles: action.requiredRoles ?? [],\n\t\ttenantId: input.tenantId,\n\t\tspaceId: input.spaceId,\n\t\tactorId: input.actorId,\n\t\tactorType: input.actorType,\n\t};\n}\n\nfunction declaredPolicies(policyIds: readonly string[]): RuntimePolicyDefinition[] {\n\treturn policyIds.map((policyId) => ({\n\t\tpolicyId: policyId as `${string}.v${number}`,\n\t\tpolicyVersion: Number(policyId.split(\".v\").at(-1) ?? 1),\n\t\tkind: \"code\",\n\t\tcodeEvaluatorPolicyId: policyId as `${string}.v${number}`,\n\t}));\n}\n\nfunction initialState(machine: import(\"@fabricorg/platform\").StateMachineDefinition | undefined): string {\n\treturn Object.values(machine?.states ?? {}).find((state) => state.stateClass === \"initial\")?.id ?? \"none\";\n}\n\nfunction isTerminal(status: ActionStatus): boolean {\n\treturn [\"completed\", \"failed\", \"blocked_by_policy\", \"reconciliation_required\", \"validation_failed\"].includes(status);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction isAdmissionTime(value: unknown): value is Date {\n\treturn value instanceof Date && Number.isFinite(value.getTime());\n}\n\n/** An own data property of `value`, or `undefined`; a getter is not run and a throwing Proxy trap reads as `undefined`. */\nfunction ownDataProperty(value: unknown, key: string): unknown {\n\tif (value === null || typeof value !== \"object\") return undefined;\n\ttry {\n\t\tconst descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n\t\treturn descriptor && \"value\" in descriptor ? descriptor.value : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction validateAuthorizationBinding(\n\tinput: SubmissionSnapshot,\n\tparameterDigest: string,\n\tauthorityMoment?: \"capture\" | \"execution\" | \"both\",\n\tcurrentTime = new Date(),\n): void {\n\tconst binding = input.authorizationBinding!;\n\tif (binding.id !== input.authorizationBindingId && input.authorizationBindingId) throw new Error(\"Authorization binding ID does not match authorizationBindingId.\");\n\tif (binding.tenantId !== input.tenantId || binding.actorId !== input.actorId || binding.actionId !== input.actionId || binding.parameterDigest !== parameterDigest) {\n\t\tthrow new Error(\"Authorization binding does not match the submitted command identity.\");\n\t}\n\tif (authorityMoment && binding.governingMoment !== authorityMoment) throw new Error(\"Authorization binding governingMoment does not match the action execution contract.\");\n\tconst capturedAt = Date.parse(binding.capturedAt);\n\tconst expiresAt = binding.expiresAt === undefined ? undefined : Date.parse(binding.expiresAt);\n\tif (!Number.isFinite(capturedAt) || (expiresAt !== undefined && !Number.isFinite(expiresAt))) {\n\t\tthrow new Error(\"Authorization binding timestamps must be valid ISO-8601 values.\");\n\t}\n\tif (expiresAt !== undefined && (expiresAt <= capturedAt || (authorityMoment === \"capture\" && expiresAt <= currentTime.getTime()))) {\n\t\tthrow new Error(\"Authorization binding must be unexpired at capture and expire after capturedAt.\");\n\t}\n}\n\nfunction idempotencyConflict(\n\texisting: ActionInvocationRecord,\n\tincoming: { actorId: string; authorizationBindingId?: string; actionVersion: number; parameterDigest: string; idempotencyKey: string },\n): IdempotencyConflict | undefined {\n\tconst reasons: IdempotencyConflict[\"reasons\"] = [];\n\tif ((existing.idempotencyActorId ?? existing.actorId) !== incoming.actorId) reasons.push(\"actor\");\n\tif ((existing.idempotencyAuthorizationBindingId ?? existing.authorizationBindingId) !== incoming.authorizationBindingId) reasons.push(\"authority_binding\");\n\tif (existing.actionVersion !== incoming.actionVersion) reasons.push(\"action_version\");\n\tif (existing.parameterDigest !== incoming.parameterDigest) reasons.push(\"parameters\");\n\treturn reasons.length ? { code: \"IDEMPOTENCY_CONFLICT\", idempotencyKey: incoming.idempotencyKey, existingInvocationId: existing.id, reasons } : undefined;\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tEnterpriseEventActorDisclosure,\n\tEnterpriseEventEnvelope,\n\tOutboxActorDisclosure,\n\tOutboxEventMetadata,\n\tOutboxPlatformHostStore,\n\tOutboxRecord,\n} from \"./types\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n\ttype PlatformHostTelemetry,\n\ttype PlatformHostTelemetryEventName,\n} from \"./observability\";\n\nexport function toEnterpriseEventEnvelope(\n\tevent: AssetEventEnvelope,\n\tmetadata: OutboxEventMetadata,\n): EnterpriseEventEnvelope {\n\treturn {\n\t\teventId: event.id,\n\t\teventType: event.eventType,\n\t\teventSchemaVersion: event.eventSchemaVersion,\n\t\ttenantId: event.tenantId,\n\t\tspaceId: event.spaceId,\n\t\tsubjectType: event.subjectType,\n\t\tsubjectId: event.subjectId,\n\t\tsequence: event.sequence,\n\t\t...(event.actionInvocationId ? { actionInvocationId: event.actionInvocationId } : {}),\n\t\tcorrelationId: event.correlationId,\n\t\t...(event.causationId ? { causationId: event.causationId } : {}),\n\t\t// Opt-in only: without it the keys are absent, so existing publishers see an unchanged envelope.\n\t\t...(includesActor(metadata) && event.actorId ? { actorId: event.actorId } : {}),\n\t\t...(includesActor(metadata) && event.actorType ? { actorType: event.actorType } : {}),\n\t\toccurredAt: event.occurredAt,\n\t\trecordedAt: event.recordedAt,\n\t\tproducerModuleVersion: metadata.producerModuleVersion,\n\t\tpayloadClassification: metadata.payloadClassification,\n\t\t...(metadata.traceContext ? { traceContext: { ...metadata.traceContext } } : {}),\n\t\t...(metadata.includeProvenance && event.provenance ? { provenance: event.provenance } : {}),\n\t\t// A provisional fact must stay marked as provisional once it leaves the platform.\n\t\t...(event.consistency ? { consistency: event.consistency } : {}),\n\t\tpayload: event.payload,\n\t};\n}\n\n/** The `includeActor` decision a store records with the outbox record it writes from `metadata`. */\nexport function outboxActorDisclosure(metadata: OutboxEventMetadata): OutboxActorDisclosure {\n\treturn includesActor(metadata) ? \"included\" : \"suppressed\";\n}\n\nfunction includesActor(metadata: OutboxEventMetadata): boolean {\n\treturn metadata.includeActor === true;\n}\n\nexport interface EnterpriseEventPublishContext {\n\tsignal: AbortSignal;\n\t/**\n\t * Why the envelope does or does not carry `actorId`/`actorType`. `runOutboxRelayCycle()` always\n\t * sets it; a caller other than the relay may omit it, which a consumer should treat like `legacy`.\n\t */\n\tactorDisclosure?: EnterpriseEventActorDisclosure;\n}\n\nexport interface EnterpriseEventPublisher {\n\tpublish(event: EnterpriseEventEnvelope, context?: EnterpriseEventPublishContext): Promise<void>;\n}\n\nexport interface OutboxRelayOptions<TDb> {\n\tstore: OutboxPlatformHostStore<TDb>;\n\tpublisher: EnterpriseEventPublisher;\n\tworkerId: string;\n\tleaseDurationMs?: number;\n\tleaseRenewalIntervalMs?: number;\n\tpublishTimeoutMs?: number;\n\tbatchSize?: number;\n\tmaxAttempts?: number;\n\tretryDelayMs?: (attempt: number) => number;\n\tnow?: () => Date;\n\ttelemetry?: PlatformHostTelemetry;\n}\n\nexport interface OutboxRelayResult {\n\tclaimed: number;\n\tpublished: number;\n\tfailed: number;\n\tdeadLettered: number;\n}\n\nexport async function runOutboxRelayCycle<TDb>(\n\toptions: OutboxRelayOptions<TDb>,\n): Promise<OutboxRelayResult> {\n\tconst now = options.now ?? (() => new Date());\n\tconst maxAttempts = options.maxAttempts ?? 10;\n\tconst leaseDurationMs = options.leaseDurationMs ?? 30_000;\n\temitRelayTelemetry(options.telemetry, \"outbox.relay.started\", now(), options.workerId);\n\tlet records: OutboxRecord[];\n\ttry {\n\t\trecords = await options.store.claimOutbox({\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseDurationMs,\n\t\t\tlimit: options.batchSize ?? 100,\n\t\t\tnow: now(),\n\t\t});\n\t} catch (error) {\n\t\temitRelayTelemetry(options.telemetry, \"outbox.relay.failed\", now(), options.workerId);\n\t\tthrow error;\n\t}\n\tfor (const record of records) {\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"outbox.lease_claimed\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxLeaseClaimed,\n\t\t\toccurredAt: now(),\n\t\t\ttenantId: record.tenantId,\n\t\t\tspaceId: record.spaceId,\n\t\t\tattributes: { attempt: record.attemptCount },\n\t\t});\n\t}\n\tconst result: OutboxRelayResult = { claimed: records.length, published: 0, failed: 0, deadLettered: 0 };\n\tfor (const record of records) {\n\t\tconst stopHeartbeat = startOutboxHeartbeat(options, record, leaseDurationMs);\n\t\ttry {\n\t\t\tawait publishWithTimeout(\n\t\t\t\toptions.publisher,\n\t\t\t\trecord,\n\t\t\t\toptions.publishTimeoutMs ?? 10_000,\n\t\t\t);\n\t\t\tawait stopHeartbeat();\n\t\t\ttry {\n\t\t\t\tawait options.store.markOutboxPublished(record.id, options.workerId, now(), record.leaseToken);\n\t\t\t} catch {\n\t\t\t\t// Publishing may already have succeeded. Leave the row for lease expiry and\n\t\t\t\t// replay with the same immutable event ID; do not claim completion.\n\t\t\t\tresult.failed += 1;\n\t\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tname: \"outbox.failed\",\n\t\t\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxFailed,\n\t\t\t\t\toccurredAt: now(),\n\t\t\t\t\ttenantId: record.tenantId,\n\t\t\t\t\tspaceId: record.spaceId,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.published += 1;\n\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\tkind: \"event\",\n\t\t\t\tname: \"outbox.published\",\n\t\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.outboxPublished,\n\t\t\t\toccurredAt: now(),\n\t\t\t\ttenantId: record.tenantId,\n\t\t\t\tspaceId: record.spaceId,\n\t\t\t});\n\t\t} catch {\n\t\t\tawait stopHeartbeat();\n\t\t\tconst deadLetter = record.attemptCount >= maxAttempts;\n\t\t\ttry {\n\t\t\t\tawait options.store.markOutboxFailed({\n\t\t\t\t\tid: record.id,\n\t\t\t\t\tworkerId: options.workerId,\n\t\t\t\t\tleaseToken: record.leaseToken,\n\t\t\t\t\terror: \"Event publisher failed\",\n\t\t\t\t\tavailableAt: new Date(now().getTime() + (options.retryDelayMs?.(record.attemptCount) ?? 1_000)),\n\t\t\t\t\tdeadLetter,\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// Lease loss is recoverable by a later relay; continue the current batch.\n\t\t\t}\n\t\t\tresult.failed += 1;\n\t\t\tif (deadLetter) result.deadLettered += 1;\n\t\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\t\tkind: \"event\",\n\t\t\t\tname: deadLetter ? \"outbox.dead_lettered\" : \"outbox.failed\",\n\t\t\t\tmetricName: deadLetter\n\t\t\t\t\t? PLATFORM_HOST_METRIC_NAMES.outboxDeadLettered\n\t\t\t\t\t: PLATFORM_HOST_METRIC_NAMES.outboxFailed,\n\t\t\t\toccurredAt: now(),\n\t\t\t\ttenantId: record.tenantId,\n\t\t\t\tspaceId: record.spaceId,\n\t\t\t\tattributes: { attempt: record.attemptCount },\n\t\t\t});\n\t\t}\n\t}\n\temitRelayTelemetry(options.telemetry, \"outbox.relay.completed\", now(), options.workerId, {\n\t\tclaimed: result.claimed,\n\t\tpublished: result.published,\n\t\tfailed: result.failed,\n\t\tdeadLettered: result.deadLettered,\n\t});\n\treturn result;\n}\n\nasync function publishWithTimeout(\n\tpublisher: EnterpriseEventPublisher,\n\trecord: OutboxRecord,\n\ttimeoutMs: number,\n): Promise<void> {\n\tif (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n\t\tthrow new Error(\"publishTimeoutMs must be a positive finite number\");\n\t}\n\tconst controller = new AbortController();\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst timeout = new Promise<never>((_, reject) => {\n\t\ttimer = setTimeout(() => {\n\t\t\tconst error = new Error(`Event publisher timed out after ${timeoutMs}ms`);\n\t\t\tcontroller.abort(error);\n\t\t\treject(error);\n\t\t}, timeoutMs);\n\t});\n\ttry {\n\t\tconst context: EnterpriseEventPublishContext = {\n\t\t\tsignal: controller.signal,\n\t\t\tactorDisclosure: record.actorDisclosure ?? \"legacy\",\n\t\t};\n\t\tawait Promise.race([publisher.publish(record.event, context), timeout]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\nfunction startOutboxHeartbeat<TDb>(\n\toptions: OutboxRelayOptions<TDb>,\n\trecord: OutboxRecord,\n\tleaseDurationMs: number,\n): () => Promise<void> {\n\tif (!record.leaseToken) return async () => undefined;\n\tconst intervalMs = options.leaseRenewalIntervalMs ??\n\t\tMath.max(1, Math.floor(leaseDurationMs / 3));\n\tlet stopped = false;\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet running: Promise<void> | undefined;\n\tconst schedule = () => {\n\t\tif (!stopped) timer = setTimeout(tick, intervalMs);\n\t};\n\tconst tick = () => {\n\t\trunning = options.store.renewOutboxLease({\n\t\t\tid: record.id,\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseToken: record.leaseToken!,\n\t\t\tleaseDurationMs,\n\t\t}).then(() => undefined).catch(() => undefined).finally(schedule);\n\t};\n\tschedule();\n\treturn async () => {\n\t\tstopped = true;\n\t\tif (timer) clearTimeout(timer);\n\t\tawait running;\n\t};\n}\n\n/**\n * A copy with its own Date fields and trace context. The event payload and\n * provenance are shallow: the copy shares them with the record, as before.\n */\nexport function cloneOutboxRecord(record: OutboxRecord): OutboxRecord {\n\tconst event: EnterpriseEventEnvelope = {\n\t\t...record.event,\n\t\toccurredAt: new Date(record.event.occurredAt),\n\t\trecordedAt: new Date(record.event.recordedAt),\n\t\t...(record.event.traceContext ? { traceContext: { ...record.event.traceContext } } : {}),\n\t};\n\t// Same rule as PostgreSQL hydration: only a record recorded as included yields actor identity,\n\t// whatever its stored envelope holds. The keys are removed, not set to undefined.\n\tif (record.actorDisclosure !== \"included\") {\n\t\tdelete event.actorId;\n\t\tdelete event.actorType;\n\t}\n\treturn {\n\t\t...record,\n\t\tavailableAt: new Date(record.availableAt),\n\t\tcreatedAt: new Date(record.createdAt),\n\t\t...(record.leaseExpiresAt ? { leaseExpiresAt: new Date(record.leaseExpiresAt) } : {}),\n\t\t...(record.publishedAt ? { publishedAt: new Date(record.publishedAt) } : {}),\n\t\tevent,\n\t};\n}\n\nfunction emitRelayTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tname: Extract<PlatformHostTelemetryEventName, `outbox.relay.${string}`>,\n\toccurredAt: Date,\n\tworkerId: string,\n\tattributes?: Record<string, number>,\n): void {\n\tconst metricName = name === \"outbox.relay.started\"\n\t\t? PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesStarted\n\t\t: name === \"outbox.relay.completed\"\n\t\t\t? PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesCompleted\n\t\t\t: PLATFORM_HOST_METRIC_NAMES.outboxRelayCyclesFailed;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname,\n\t\tmetricName,\n\t\toccurredAt,\n\t\tattributes: { workerId, ...attributes },\n\t});\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tApprovalDecisionTransitionResult,\n\tApprovalPlatformHostStore,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tGovernancePlatformHostStore,\n\tPolicyObligationRecord,\n\tExecutionAttestationRecord,\n\tExternalReconciliationRecord,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tRecoverablePlatformHostStore,\n\tOutboxPlatformHostStore,\n\tOutboxRecord,\n\tOutboxRequeuePlatformHostStore,\n\tOutboxRequeueRecord,\n\tRequeueOutboxDeadLetterStoreInput,\n\tRequeueOutboxDeadLetterStoreResult,\n\tOutboxEventMetadata,\n\tClaimOutboxInput,\n\tOutboxStatus,\n\tPlatformHostMutationTransaction,\n} from \"./types\";\nimport { cloneOutboxRecord, outboxActorDisclosure, toEnterpriseEventEnvelope } from \"./outbox\";\nimport type { PlatformHostHealthCounts, PlatformHostHealthQuery } from \"./observability\";\n\nexport interface MemoryPlatformHostTransactionProvider<TDb> {\n\tsnapshot(db: TDb): TDb;\n\trestore(db: TDb, snapshot: TDb): void;\n}\n\nexport class MemoryPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb>, OutboxPlatformHostStore<TDb>, OutboxRequeuePlatformHostStore<TDb> {\n\treadonly transactionalOutbox: boolean;\n\tdeclare transactionWithEvents?: <TResult>(run: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>) => Promise<TResult>;\n\tprivate transactionTail: Promise<void> = Promise.resolve();\n\treadonly invocations: ActionInvocationRecord[] = [];\n\treadonly policyEvaluations: PolicyEvaluationRecord[] = [];\n\treadonly adapterInvocations: AdapterInvocationRecord[] = [];\n\treadonly events: AssetEventEnvelope[] = [];\n\treadonly policyObligations: PolicyObligationRecord[] = [];\n\treadonly executionAttestations: ExecutionAttestationRecord[] = [];\n\treadonly externalReconciliations: ExternalReconciliationRecord[] = [];\n\treadonly outbox: OutboxRecord[] = [];\n\t/**\n\t * Requeue evidence is append-only audit history, so unlike the ledger\n\t * arrays above, which tests have always inspected and seeded directly, it\n\t * is not public: `listOutboxRequeues` returns copies with their own Dates. TypeScript\n\t * `private`, as for the store's other internals, is a compile-time guard.\n\t */\n\tprivate readonly outboxRequeues: OutboxRequeueRecord[] = [];\n\n\tconstructor(\n\t\treadonly db: TDb,\n\t\ttransactionProvider?: MemoryPlatformHostTransactionProvider<TDb>,\n\t) {\n\t\tthis.transactionalOutbox = transactionProvider !== undefined;\n\t\tif (transactionProvider) this.transactionWithEvents = (run) => this.runTransactionWithEvents(run, transactionProvider);\n\t}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tprivate async runTransactionWithEvents<TResult>(\n\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t\ttransactionProvider: MemoryPlatformHostTransactionProvider<TDb>,\n\t): Promise<TResult> {\n\t\tlet release!: () => void;\n\t\tconst previous = this.transactionTail;\n\t\tthis.transactionTail = new Promise<void>((resolve) => { release = resolve; });\n\t\tawait previous;\n\t\tlet domainSnapshot: TDb | undefined;\n\t\tlet snapshotCreated = false;\n\t\ttry {\n\t\t\tdomainSnapshot = transactionProvider.snapshot(this.db);\n\t\t\tsnapshotCreated = true;\n\t\t\tconst pendingEvents: Array<{ event: AssetEventEnvelope; metadata?: OutboxEventMetadata }> = [];\n\t\t\tconst pendingUpdates: Array<{ id: string; tenantId: string; spaceId: string; patch: import(\"./types\").ActionInvocationPatch }> = [];\n\t\t\tconst appendPending = async (event: AssetEventEnvelope, metadata?: OutboxEventMetadata) => {\n\t\t\t\tif (this.events.some((candidate) => candidate.id === event.id) || pendingEvents.some((candidate) => candidate.event.id === event.id)) return;\n\t\t\t\tpendingEvents.push({ event, ...(metadata ? { metadata } : {}) });\n\t\t\t};\n\t\t\tconst result = await run({\n\t\t\t\tdb: this.db,\n\t\t\t\tgetActionInvocationForUpdate: async (id, tenantId, spaceId) => {\n\t\t\t\t\tconst record = await this.getActionInvocation(id, tenantId, spaceId);\n\t\t\t\t\treturn record ? structuredClone(record) : undefined;\n\t\t\t\t},\n\t\t\t\tgetEvent: async (id, tenantId, spaceId) =>\n\t\t\t\t\tpendingEvents.find((candidate) =>\n\t\t\t\t\t\tcandidate.event.id === id &&\n\t\t\t\t\t\tcandidate.event.tenantId === tenantId &&\n\t\t\t\t\t\tcandidate.event.spaceId === spaceId)?.event ??\n\t\t\t\t\tthis.events.find((event) =>\n\t\t\t\t\t\tevent.id === id &&\n\t\t\t\t\t\tevent.tenantId === tenantId &&\n\t\t\t\t\t\tevent.spaceId === spaceId),\n\t\t\t\tappendEvent: (event) => appendPending(event),\n\t\t\t\tappendEventWithOutbox: (event, metadata) => appendPending(event, metadata),\n\t\t\t\tnextEventSequence: async (tenantId, spaceId) => (await this.listEvents(tenantId, spaceId)).length + pendingEvents.filter((candidate) => candidate.event.tenantId === tenantId && candidate.event.spaceId === spaceId).length + 1,\n\t\t\t\tlistEvents: async (tenantId, spaceId) => [...await this.listEvents(tenantId, spaceId), ...pendingEvents.map((candidate) => candidate.event).filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)],\n\t\t\t\tgetEntityState: async (tenantId, spaceId, entityType, entityId) => {\n\t\t\t\t\tlet state = await this.getEntityState(tenantId, spaceId, entityType, entityId);\n\t\t\t\t\tfor (const pending of pendingEvents) {\n\t\t\t\t\t\tconst event = pending.event;\n\t\t\t\t\t\tif (event.tenantId !== tenantId || event.spaceId !== spaceId || event.subjectType !== entityType || event.subjectId !== entityId) continue;\n\t\t\t\t\t\tconst candidate = (event.payload as { toState?: unknown } | undefined)?.toState;\n\t\t\t\t\t\tif (typeof candidate === \"string\") state = candidate;\n\t\t\t\t\t}\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\tupdateActionInvocation: async (id, tenantId, spaceId, patch) => { pendingUpdates.push({ id, tenantId, spaceId, patch }); },\n\t\t\t\tupdateLeasedActionInvocation: async (input) => {\n\t\t\t\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\t\t\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\t\t\t\trecord.leaseToken !== input.leaseToken) return false;\n\t\t\t\t\tpendingUpdates.push({ id: input.id, tenantId: input.tenantId, spaceId: input.spaceId, patch: input.patch });\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t});\n\t\t\tfor (const update of pendingUpdates) {\n\t\t\t\tif (!await this.getActionInvocation(update.id, update.tenantId, update.spaceId)) throw new Error(`ActionInvocation not found: ${update.id}`);\n\t\t\t}\n\t\t\tfor (const pending of pendingEvents) {\n\t\t\t\tif (pending.metadata) await this.appendEventWithOutbox(pending.event, pending.metadata);\n\t\t\t\telse await this.appendEvent(pending.event);\n\t\t\t}\n\t\t\tfor (const update of pendingUpdates) await this.updateActionInvocation(update.id, update.tenantId, update.spaceId, update.patch);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (snapshotCreated) transactionProvider.restore(this.db, domainSnapshot!);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tif (input.idempotencyKey) {\n\t\t\tconst existing = this.invocations.find(\n\t\t\t\t(record) =>\n\t\t\t\t\trecord.tenantId === input.tenantId &&\n\t\t\t\t\trecord.spaceId === input.spaceId &&\n\t\t\t\t\trecord.actionId === input.actionId &&\n\t\t\t\t\trecord.idempotencyKey === input.idempotencyKey,\n\t\t\t);\n\t\t\tif (existing) return existing;\n\t\t}\n\t\tconst now = new Date();\n\t\tconst record = { ...input, attemptCount: 0, leaseToken: 0, createdAt: now, updatedAt: now };\n\t\tthis.invocations.push(record);\n\t\treturn record;\n\t}\n\n\tasync getActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<ActionInvocationRecord | undefined> {\n\t\treturn this.invocations.find(\n\t\t\t(record) => record.id === id && record.tenantId === tenantId && record.spaceId === spaceId,\n\t\t);\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: import(\"./types\").ActionInvocationPatch,\n\t): Promise<void> {\n\t\tconst record = await this.getActionInvocation(id, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${id}`);\n\t\tObject.assign(record, patch, { updatedAt: new Date() });\n\t\tif (Object.hasOwn(patch, \"pendingCompletion\") && patch.pendingCompletion === undefined) delete record.pendingCompletion;\n\t\tif (Object.hasOwn(patch, \"externalCompletion\") && patch.externalCompletion === undefined) delete record.externalCompletion;\n\t\tif (Object.hasOwn(patch, \"error\") && patch.error === undefined) delete record.error;\n\t\tif (patch.pendingCompletion && patch.status === \"running\") {\n\t\t\t// Parked: waiting on an external system is not holding a lease. A\n\t\t\t// handoff recorded mid-execution (no status) keeps the lease so the\n\t\t\t// executing worker can still finalize.\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t}\n\t\tif (\n\t\t\tpatch.status === \"waiting_for_approval\" ||\n\t\t\tpatch.status === \"completed\" ||\n\t\t\tpatch.status === \"failed\" ||\n\t\t\tpatch.status === \"blocked_by_policy\" ||\n\t\t\tpatch.status === \"reconciliation_required\" ||\n\t\t\tpatch.status === \"validation_failed\"\n\t\t) {\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t}\n\t}\n\n\tasync recordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst record = await this.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\trecord.hitlRoute = decision.route;\n\t\trecord.hitlRiskTier = decision.riskTier;\n\t\trecord.hitlReason = decision.reason;\n\t\tif (decision.policyVersion) record.hitlPolicyVersion = decision.policyVersion;\n\t\trecord.updatedAt = decision.evaluatedAt;\n\t\treturn record;\n\t}\n\n\tasync beginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult> {\n\t\tconst record = await this.getActionInvocation(\n\t\t\tinput.actionInvocationId,\n\t\t\tinput.tenantId,\n\t\t\tinput.spaceId,\n\t\t);\n\t\tif (!record || record.status !== \"waiting_for_approval\") {\n\t\t\treturn { applied: false, ...(record ? { invocation: record } : {}) };\n\t\t}\n\t\trecord.approvalDecision = input.decision;\n\t\trecord.updatedAt = input.now;\n\t\tif (!input.decision.approved) {\n\t\t\trecord.status = \"failed\";\n\t\t\trecord.error = `Approval rejected: ${input.decision.reason ?? \"no reason provided\"}`;\n\t\t\tdelete record.leaseOwner;\n\t\t\tdelete record.leaseExpiresAt;\n\t\t\treturn { applied: true, invocation: record };\n\t\t}\n\t\trecord.status = \"running\";\n\t\trecord.error = undefined;\n\t\trecord.leaseOwner = input.leaseOwner;\n\t\trecord.leaseExpiresAt = new Date(input.now.getTime() + input.leaseDurationMs);\n\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\trecord.attemptCount = Math.max(record.attemptCount, 1);\n\t\treturn { applied: true, invocation: record };\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tif (this.policyEvaluations.some((candidate) => candidate.id === record.id)) return;\n\t\tthis.policyEvaluations.push(record);\n\t}\n\n\tasync recordMutationGovernance(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tcontext: Pick<ActionInvocationRecord, \"mutationFootprint\" | \"executionPrincipal\"> & {\n\t\t\tfootprint: NonNullable<ActionInvocationRecord[\"mutationFootprint\"]>;\n\t\t\texecutionPrincipal: NonNullable<ActionInvocationRecord[\"executionPrincipal\"]>;\n\t\t},\n\t): Promise<ActionInvocationRecord> {\n\t\tconst record = await this.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!record) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\trecord.mutationFootprint = context.footprint;\n\t\trecord.executionPrincipal = context.executionPrincipal;\n\t\trecord.updatedAt = new Date();\n\t\treturn record;\n\t}\n\n\tasync appendPolicyObligations(records: PolicyObligationRecord[]): Promise<void> {\n\t\tfor (const record of records) {\n\t\t\tif (!this.policyObligations.some((candidate) => candidate.actionInvocationId === record.actionInvocationId && candidate.id === record.id)) {\n\t\t\t\tthis.policyObligations.push(record);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync listPolicyObligations(actionInvocationId: string, tenantId: string, spaceId: string) {\n\t\treturn this.policyObligations.filter((record) => record.actionInvocationId === actionInvocationId && record.tenantId === tenantId && record.spaceId === spaceId);\n\t}\n\n\tasync updatePolicyObligation(actionInvocationId: string, obligationId: string, status: PolicyObligationRecord[\"status\"], evidenceReferences?: PolicyObligationRecord[\"evidenceReferences\"]): Promise<void> {\n\t\tconst record = this.policyObligations.find((candidate) => candidate.actionInvocationId === actionInvocationId && candidate.id === obligationId);\n\t\tif (!record) throw new Error(`Policy obligation not found: ${obligationId}`);\n\t\trecord.status = status;\n\t\tif (evidenceReferences) record.evidenceReferences = evidenceReferences;\n\t\trecord.updatedAt = new Date();\n\t}\n\n\tasync appendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void> {\n\t\tif (!this.executionAttestations.some((candidate) => candidate.id === record.id)) this.executionAttestations.push(record);\n\t}\n\n\tasync listExecutionAttestations(actionInvocationId: string, tenantId: string, spaceId: string) {\n\t\treturn this.executionAttestations.filter((record) => record.actionInvocationId === actionInvocationId && record.tenantId === tenantId && record.spaceId === spaceId);\n\t}\n\n\tasync appendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void> {\n\t\tif (!this.externalReconciliations.some((candidate) => candidate.id === record.id)) this.externalReconciliations.push(record);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tif (this.adapterInvocations.some((candidate) => candidate.id === record.id)) return;\n\t\tthis.adapterInvocations.push(record);\n\t}\n\n\tasync getAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined> {\n\t\treturn this.adapterInvocations.find((candidate) => candidate.id === id);\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tconst record = this.adapterInvocations.find((candidate) => candidate.id === id);\n\t\tif (!record) throw new Error(`AdapterInvocation not found: ${id}`);\n\t\tObject.assign(record, patch);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tif (this.events.some((candidate) => candidate.id === event.id)) return;\n\t\tthis.events.push(event);\n\t}\n\n\tasync appendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void> {\n\t\tif (this.events.some((candidate) => candidate.id === event.id)) return;\n\t\tconst createdAt = new Date(event.recordedAt);\n\t\tthis.events.push(event);\n\t\tthis.outbox.push({\n\t\t\tid: event.id,\n\t\t\ttenantId: event.tenantId,\n\t\t\tspaceId: event.spaceId,\n\t\t\tevent: toEnterpriseEventEnvelope(event, metadata),\n\t\t\tactorDisclosure: outboxActorDisclosure(metadata),\n\t\t\tstatus: \"pending\",\n\t\t\tattemptCount: 0,\n\t\t\tavailableAt: createdAt,\n\t\t\tcreatedAt,\n\t\t});\n\t}\n\n\tasync claimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\treturn this.outbox\n\t\t\t.filter((record) => record.status === \"pending\" && record.availableAt <= current && (!record.leaseExpiresAt || record.leaseExpiresAt <= current) && (!input.tenantId || record.tenantId === input.tenantId) && (!input.spaceId || record.spaceId === input.spaceId))\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime() || left.id.localeCompare(right.id))\n\t\t\t.slice(0, Math.max(1, Math.min(input.limit ?? 100, 1_000)))\n\t\t\t.map((record) => {\n\t\t\t\trecord.leaseOwner = input.workerId;\n\t\t\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\t\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\t\t\trecord.attemptCount += 1;\n\t\t\t\treturn cloneOutboxRecord(record);\n\t\t\t});\n\t}\n\n\tasync markOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(id, workerId, leaseToken);\n\t\trecord.status = \"published\";\n\t\trecord.publishedAt = publishedAt;\n\t\tdelete record.leaseOwner;\n\t\tdelete record.leaseExpiresAt;\n\t}\n\n\tasync markOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(input.id, input.workerId, input.leaseToken);\n\t\trecord.status = input.deadLetter ? \"dead_letter\" : \"pending\";\n\t\trecord.lastError = input.error;\n\t\trecord.availableAt = input.availableAt;\n\t\tdelete record.leaseOwner;\n\t\tdelete record.leaseExpiresAt;\n\t}\n\n\tasync renewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean> {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === input.id);\n\t\tconst current = input.now ?? new Date();\n\t\tif (!record || record.status !== \"pending\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken || !record.leaseExpiresAt ||\n\t\t\trecord.leaseExpiresAt <= current) return false;\n\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\treturn true;\n\t}\n\n\tasync listOutbox(input: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] } = {}): Promise<OutboxRecord[]> {\n\t\treturn this.outbox.filter((record) => (!input.tenantId || record.tenantId === input.tenantId) && (!input.spaceId || record.spaceId === input.spaceId) && (!input.statuses?.length || input.statuses.includes(record.status))).map(cloneOutboxRecord);\n\t}\n\n\tasync getOutboxRecord(id: string, tenantId: string, spaceId: string): Promise<OutboxRecord | undefined> {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === id && candidate.tenantId === tenantId && candidate.spaceId === spaceId);\n\t\treturn record ? cloneOutboxRecord(record) : undefined;\n\t}\n\n\tasync requeueOutboxDeadLetter(input: RequeueOutboxDeadLetterStoreInput): Promise<RequeueOutboxDeadLetterStoreResult> {\n\t\t// No await between the check and the writes, so the compare-and-set and\n\t\t// its evidence are one step for every other caller of this store.\n\t\tconst record = this.outbox.find((candidate) => candidate.id === input.id && candidate.tenantId === input.tenantId && candidate.spaceId === input.spaceId);\n\t\tif (!record) return { applied: false, refusal: \"not_found\" };\n\t\tif (record.status !== \"dead_letter\") return { applied: false, refusal: \"not_dead_letter\", currentStatus: record.status };\n\t\tif ((record.leaseToken ?? 0) !== input.expectedLeaseToken) return { applied: false, refusal: \"stale\", currentStatus: record.status };\n\t\tconst requeue: OutboxRequeueRecord = {\n\t\t\tid: input.requeueId,\n\t\t\toutboxId: record.id,\n\t\t\ttenantId: record.tenantId,\n\t\t\tspaceId: record.spaceId,\n\t\t\teventId: record.event.eventId,\n\t\t\tactorId: input.actorId,\n\t\t\tactorType: input.actorType,\n\t\t\treason: input.reason,\n\t\t\trequeuedAt: new Date(input.requeuedAt),\n\t\t\tavailableAt: new Date(input.availableAt),\n\t\t\tpriorAttemptCount: record.attemptCount,\n\t\t\t...(record.lastError !== undefined ? { priorLastError: record.lastError } : {}),\n\t\t\tpriorAvailableAt: new Date(record.availableAt),\n\t\t\tpriorLeaseToken: record.leaseToken ?? 0,\n\t\t};\n\t\trecord.status = \"pending\";\n\t\trecord.attemptCount = 0;\n\t\trecord.availableAt = new Date(input.availableAt);\n\t\tdelete record.leaseOwner;\n\t\tdelete record.leaseExpiresAt;\n\t\tthis.outboxRequeues.push(requeue);\n\t\treturn { applied: true, record: cloneOutboxRecord(record), requeue: cloneOutboxRequeue(requeue) };\n\t}\n\n\tasync listOutboxRequeues(input: { tenantId: string; spaceId: string; outboxId?: string }): Promise<OutboxRequeueRecord[]> {\n\t\treturn this.outboxRequeues\n\t\t\t.filter((requeue) => requeue.tenantId === input.tenantId && requeue.spaceId === input.spaceId && (input.outboxId === undefined || requeue.outboxId === input.outboxId))\n\t\t\t.sort((left, right) => left.requeuedAt.getTime() - right.requeuedAt.getTime() || left.id.localeCompare(right.id))\n\t\t\t.map(cloneOutboxRequeue);\n\t}\n\n\tprivate requireLeasedOutbox(id: string, workerId: string, leaseToken?: number): OutboxRecord {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === id);\n\t\tif (!record || record.leaseOwner !== workerId ||\n\t\t\t(record.leaseToken ?? 0) !== (leaseToken ?? 0)) {\n\t\t\tthrow new Error(`Outbox record ${id} is not leased by ${workerId}.`);\n\t\t}\n\t\treturn record;\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\treturn (\n\t\t\tthis.events.filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)\n\t\t\t\t.length + 1\n\t\t);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t): Promise<string | undefined> {\n\t\tlet state: string | undefined;\n\t\tfor (const event of this.events) {\n\t\t\tif (\n\t\t\t\tevent.tenantId !== tenantId ||\n\t\t\t\tevent.spaceId !== spaceId ||\n\t\t\t\tevent.subjectType !== entityType ||\n\t\t\t\tevent.subjectId !== entityId\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst candidate = (event.payload as { toState?: unknown } | undefined)?.toState;\n\t\t\tif (typeof candidate === \"string\") state = candidate;\n\t\t}\n\t\treturn state;\n\t}\n\n\tasync listActionInvocations(\n\t\tinput: ListActionInvocationsInput = {},\n\t): Promise<ActionInvocationRecord[]> {\n\t\treturn this.invocations\n\t\t\t.filter(\n\t\t\t\t(record) =>\n\t\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId) &&\n\t\t\t\t\t(!input.statuses?.length || input.statuses.includes(record.status)) &&\n\t\t\t\t\t(!input.updatedBefore || record.updatedAt < input.updatedBefore) &&\n\t\t\t\t\t(!(input.awaitingCompletion || input.completionDueBefore) || record.pendingCompletion !== undefined) &&\n\t\t\t\t\t(!input.completionDueBefore || (record.pendingCompletion?.dueAt !== undefined && record.pendingCompletion.dueAt <= input.completionDueBefore)) &&\n\t\t\t\t\t(!input.unleased || record.leaseOwner === undefined),\n\t\t\t)\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime())\n\t\t\t.slice(0, input.limit ?? 100);\n\t}\n\n\tasync getHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts> {\n\t\tconst invocations = this.invocations.filter(\n\t\t\t(record) =>\n\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId),\n\t\t);\n\t\tconst outbox = this.outbox.filter(\n\t\t\t(record) =>\n\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId),\n\t\t);\n\t\treturn {\n\t\t\tinvocationBacklog: invocations.filter((item) => item.status === \"pending\").length,\n\t\t\tinvocationRunning: invocations.filter((item) => item.status === \"running\").length,\n\t\t\tinvocationExpiredLeases: invocations.filter((item) =>\n\t\t\t\titem.status === \"running\" &&\n\t\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\t\titem.leaseExpiresAt.getTime() <= input.now.getTime(),\n\t\t\t).length,\n\t\t\tinvocationApprovalWaits: invocations.filter((item) => item.status === \"waiting_for_approval\").length,\n\t\t\tinvocationReconciliationRequired: invocations.filter((item) => item.status === \"reconciliation_required\").length,\n\t\t\toutboxBacklog: outbox.filter((item) => item.status === \"pending\").length,\n\t\t\toutboxExpiredLeases: outbox.filter((item) =>\n\t\t\t\titem.status === \"pending\" &&\n\t\t\t\titem.leaseExpiresAt !== undefined &&\n\t\t\t\titem.leaseExpiresAt.getTime() <= input.now.getTime(),\n\t\t\t).length,\n\t\t\toutboxDeadLetters: outbox.filter((item) => item.status === \"dead_letter\").length,\n\t\t};\n\t}\n\n\tasync claimActionInvocations(\n\t\tinput: ClaimActionInvocationsInput,\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst eligible = this.invocations\n\t\t\t.filter(\n\t\t\t\t(record) =>\n\t\t\t\t\t(!input.tenantId || record.tenantId === input.tenantId) &&\n\t\t\t\t\t(!input.spaceId || record.spaceId === input.spaceId) &&\n\t\t\t\t\t(record.status === \"pending\" ||\n\t\t\t\t\t\t(record.status === \"running\" &&\n\t\t\t\t\t\t\trecord.leaseExpiresAt !== undefined &&\n\t\t\t\t\t\t\trecord.leaseExpiresAt <= current)),\n\t\t\t)\n\t\t\t.sort((left, right) => left.createdAt.getTime() - right.createdAt.getTime())\n\t\t\t.slice(0, input.limit ?? 10);\n\t\tfor (const record of eligible) {\n\t\t\trecord.status = \"running\";\n\t\t\trecord.leaseOwner = input.workerId;\n\t\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\t\trecord.leaseToken = (record.leaseToken ?? 0) + 1;\n\t\t\trecord.attemptCount += 1;\n\t\t\trecord.updatedAt = current;\n\t\t}\n\t\treturn eligible.map((record) => structuredClone(record));\n\t}\n\n\tasync updateLeasedActionInvocation(input: import(\"./types\").UpdateLeasedActionInvocationInput): Promise<boolean> {\n\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken) return false;\n\t\tawait this.updateActionInvocation(input.id, input.tenantId, input.spaceId, input.patch);\n\t\treturn true;\n\t}\n\n\tasync renewActionInvocationLease(input: import(\"./types\").RenewActionInvocationLeaseInput): Promise<boolean> {\n\t\tconst record = await this.getActionInvocation(input.id, input.tenantId, input.spaceId);\n\t\tconst current = input.now ?? new Date();\n\t\tif (!record || record.status !== \"running\" || record.leaseOwner !== input.workerId ||\n\t\t\trecord.leaseToken !== input.leaseToken || !record.leaseExpiresAt ||\n\t\t\trecord.leaseExpiresAt <= current) return false;\n\t\trecord.leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\trecord.updatedAt = current;\n\t\treturn true;\n\t}\n\n\tasync listEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]> {\n\t\treturn this.events\n\t\t\t.filter((event) => event.tenantId === tenantId && event.spaceId === spaceId)\n\t\t\t.sort((left, right) => left.sequence - right.sequence);\n\t}\n}\n\nfunction cloneOutboxRequeue(requeue: OutboxRequeueRecord): OutboxRequeueRecord {\n\treturn {\n\t\t...requeue,\n\t\trequeuedAt: new Date(requeue.requeuedAt),\n\t\tavailableAt: new Date(requeue.availableAt),\n\t\tpriorAvailableAt: new Date(requeue.priorAvailableAt),\n\t};\n}\n","import { createHash } from \"node:crypto\";\nimport type { PlatformHostSqlClient } from \"./postgres-store\";\n\nexport interface PostgresMigration {\n\tversion: number;\n\tname: string;\n\tsql: string;\n}\n\n/**\n * Applies an immutable, ordered migration set in one PostgreSQL transaction.\n *\n * The transaction-scoped advisory lock serializes migrators. A previously\n * applied version may be presented again only when its checksum is unchanged.\n */\nexport async function applyPostgresMigrations(\n\tclient: PlatformHostSqlClient,\n\tmigrations: readonly PostgresMigration[],\n): Promise<void> {\n\tconst ordered = validateMigrations(migrations);\n\tconst statements = ordered.map((migration) => migrationStatement(migration));\n\n\tawait client.query(`\n\t\tBEGIN;\n\t\tSELECT pg_advisory_xact_lock(hashtext('fabric_platform.schema_migrations'));\n\t\tCREATE SCHEMA IF NOT EXISTS fabric_platform;\n\t\tCREATE TABLE IF NOT EXISTS fabric_platform.schema_migrations (\n\t\t\tversion integer PRIMARY KEY,\n\t\t\tname text NOT NULL,\n\t\t\tchecksum text NOT NULL,\n\t\t\tapplied_at timestamptz NOT NULL DEFAULT now()\n\t\t);\n\t\t${statements.join(\"\\n\")}\n\t\tCOMMIT;\n\t`);\n}\n\nfunction validateMigrations(\n\tmigrations: readonly PostgresMigration[],\n): PostgresMigration[] {\n\tconst ordered = [...migrations].sort((left, right) => left.version - right.version);\n\tconst versions = new Set<number>();\n\n\tfor (const migration of ordered) {\n\t\tif (!Number.isSafeInteger(migration.version) || migration.version < 1) {\n\t\t\tthrow new Error(`Migration version must be a positive safe integer: ${migration.version}`);\n\t\t}\n\t\tif (versions.has(migration.version)) {\n\t\t\tthrow new Error(`Duplicate migration version: ${migration.version}`);\n\t\t}\n\t\tif (!/^[a-z][a-z0-9_]*$/.test(migration.name)) {\n\t\t\tthrow new Error(`Invalid migration name: ${migration.name}`);\n\t\t}\n\t\tif (migration.sql.trim().length === 0) {\n\t\t\tthrow new Error(`Migration ${migration.version} has no SQL`);\n\t\t}\n\t\tversions.add(migration.version);\n\t}\n\n\treturn ordered;\n}\n\nfunction migrationStatement(migration: PostgresMigration): string {\n\tconst checksum = createHash(\"sha256\").update(migration.sql).digest(\"hex\");\n\tconst delimiter = `$fabric_platform_migration_${migration.version}$`;\n\tif (migration.sql.includes(delimiter)) {\n\t\tthrow new Error(`Migration ${migration.version} contains its reserved SQL delimiter`);\n\t}\n\n\treturn `\n\t\tDO ${delimiter}\n\t\tDECLARE\n\t\t\trecorded_checksum text;\n\t\tBEGIN\n\t\t\tSELECT checksum INTO recorded_checksum\n\t\t\tFROM fabric_platform.schema_migrations\n\t\t\tWHERE version = ${migration.version};\n\n\t\t\tIF FOUND THEN\n\t\t\t\tIF recorded_checksum <> ${sqlLiteral(checksum)} THEN\n\t\t\t\t\tRAISE EXCEPTION 'Migration checksum mismatch for version ${migration.version}';\n\t\t\t\tEND IF;\n\t\t\tELSE\n\t\t\t\t${migration.sql}\n\t\t\t\tINSERT INTO fabric_platform.schema_migrations (version, name, checksum)\n\t\t\t\tVALUES (${migration.version}, ${sqlLiteral(migration.name)}, ${sqlLiteral(checksum)});\n\t\t\tEND IF;\n\t\tEND\n\t\t${delimiter};`;\n}\n\nfunction sqlLiteral(value: string): string {\n\treturn `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n","import type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\n\tActionInvocationPatch,\n\tApprovalDecisionTransitionResult,\n\tApprovalPlatformHostStore,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tAtomicMutationPlatformHostStore,\n\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tGovernancePlatformHostStore,\n\tPolicyObligationRecord,\n\tExecutionAttestationRecord,\n\tExternalReconciliationRecord,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tPlatformHostMutationTransaction,\n\tRecoverablePlatformHostStore,\n\tOutboxPlatformHostStore,\n\tOutboxEventMetadata,\n\tOutboxRecord,\n\tOutboxRequeuePlatformHostStore,\n\tOutboxRequeueRecord,\n\tRequeueOutboxDeadLetterStoreInput,\n\tRequeueOutboxDeadLetterStoreResult,\n\tClaimOutboxInput,\n\tOutboxStatus,\n\tEnterpriseEventEnvelope,\n} from \"./types\";\nimport { outboxActorDisclosure, toEnterpriseEventEnvelope } from \"./outbox\";\nimport { applyPostgresMigrations } from \"./postgres-migrations\";\nimport type { PlatformHostHealthCounts, PlatformHostHealthQuery } from \"./observability\";\n\nexport interface PlatformHostSqlResult<Row = Record<string, unknown>> {\n\trows: Row[];\n}\n\n/** Structural subset implemented by `pg.Pool` and Lakebase-compatible clients. */\nexport interface PlatformHostSqlClient {\n\tquery<Row = Record<string, unknown>>(\n\t\tsql: string,\n\t\tvalues?: unknown[],\n\t): Promise<PlatformHostSqlResult<Row>>;\n}\n\nexport interface PostgresPlatformHostTransactionContext<TDb> {\n\tdb: TDb;\n\tsql: PlatformHostSqlClient;\n}\n\n/**\n * Application-owned transaction binder.\n *\n * Platform Host cannot infer how an application's `TDb` is rebound to a\n * `pg.PoolClient`. Production applications provide this adapter so domain\n * methods and Host ledger writes share one PostgreSQL transaction.\n */\nexport interface PostgresPlatformHostTransactionProvider<TDb> {\n\trun<TResult>(\n\t\trun: (context: PostgresPlatformHostTransactionContext<TDb>) => Promise<TResult>,\n\t): Promise<TResult>;\n}\n\n/** Durable mutation-pipeline ledger for Databricks Lakebase or standard Postgres. */\nexport class PostgresPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb>, OutboxPlatformHostStore<TDb>, OutboxRequeuePlatformHostStore<TDb> {\n\treadonly transactionWithEvents?: AtomicMutationPlatformHostStore<TDb>[\"transactionWithEvents\"];\n\treadonly transactionalOutbox: boolean;\n\n\tconstructor(\n\t\treadonly db: TDb,\n\t\tprivate readonly sql: PlatformHostSqlClient,\n\t\ttransactionProvider?: PostgresPlatformHostTransactionProvider<TDb>,\n\t) {\n\t\tthis.transactionalOutbox = transactionProvider !== undefined;\n\t\tif (transactionProvider) {\n\t\t\tthis.transactionWithEvents = async <TResult>(\n\t\t\t\trun: (transaction: PlatformHostMutationTransaction<TDb>) => Promise<TResult>,\n\t\t\t): Promise<TResult> =>\n\t\t\t\ttransactionProvider.run(async ({ db, sql }) => {\n\t\t\t\t\tconst scoped = new PostgresPlatformHostStore(db, sql);\n\t\t\t\t\treturn run({\n\t\t\t\t\t\tdb,\n\t\t\t\t\t\tgetActionInvocationForUpdate: async (id, tenantId, spaceId) => {\n\t\t\t\t\t\t\tconst result = await sql.query<Record<string, unknown>>(\n\t\t\t\t\t\t\t\t`SELECT * FROM fabric_platform.action_invocations\n\t\t\t\t\t\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t\t\t\t\t\t FOR UPDATE`,\n\t\t\t\t\t\t\t\t[id, tenantId, spaceId],\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn result.rows[0] ? toActionRecord(result.rows[0]) : undefined;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetEvent: (id, tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.getEvent(id, tenantId, spaceId),\n\t\t\t\t\t\tappendEvent: (event) => scoped.appendEvent(event),\n\t\t\t\t\t\tappendEventWithOutbox: (event, metadata) => scoped.appendEventWithOutbox(event, metadata),\n\t\t\t\t\t\tnextEventSequence: (tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.nextEventSequence(tenantId, spaceId),\n\t\t\t\t\t\tlistEvents: (tenantId, spaceId) =>\n\t\t\t\t\t\t\tscoped.listEvents(tenantId, spaceId),\n\t\t\t\t\t\tgetEntityState: (tenantId, spaceId, entityType, entityId) =>\n\t\t\t\t\t\t\tscoped.getEntityState(tenantId, spaceId, entityType, entityId),\n\t\t\t\t\t\tupdateActionInvocation: (id, tenantId, spaceId, patch) =>\n\t\t\t\t\t\t\tscoped.updateActionInvocation(id, tenantId, spaceId, patch),\n\t\t\t\t\t\tupdateLeasedActionInvocation: (input) =>\n\t\t\t\t\t\t\tscoped.updateLeasedActionInvocation(input),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t}\n\n\tasync ensureSchema(): Promise<void> {\n\t\tawait applyPostgresMigrations(this.sql, [{\n\t\t\tversion: 1,\n\t\t\tname: \"host_ledger_baseline\",\n\t\t\tsql: `\n\t\t\tCREATE SCHEMA IF NOT EXISTS fabric_platform;\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.action_invocations (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\taction_id text NOT NULL, action_version integer NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, status text NOT NULL,\n\t\t\t\tparameters jsonb NOT NULL, result jsonb NOT NULL DEFAULT '{}'::jsonb,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text, idempotency_key text,\n\t\t\t\tparameter_digest text, parameter_digest_algorithm text, idempotency_actor_id text,\n\t\t\t\tidempotency_authorization_binding_id text, invocation_provenance jsonb,\n\t\t\t\tauthorization_binding jsonb, execution_reason text, authorization_reconciliation jsonb,\n\t\t\t\tadapter_reconciliation jsonb, authorization_binding_id text, error text,\n\t\t\t\tattempt_count integer NOT NULL DEFAULT 0, lease_owner text,\n\t\t\t\tlease_expires_at timestamptz, hitl_route text, hitl_risk_tier text,\n\t\t\t\thitl_reason text, hitl_policy_version text, approval_decision jsonb,\n\t\t\t\tmutation_footprint jsonb, execution_principal jsonb, runtime_evidence jsonb,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_key text,\n\t\t\t\tADD COLUMN IF NOT EXISTS parameter_digest text,\n\t\t\t\tADD COLUMN IF NOT EXISTS parameter_digest_algorithm text,\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_actor_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS idempotency_authorization_binding_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS invocation_provenance jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_binding jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS execution_reason text,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_reconciliation jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS adapter_reconciliation jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS authorization_binding_id text,\n\t\t\t\tADD COLUMN IF NOT EXISTS attempt_count integer NOT NULL DEFAULT 0,\n\t\t\t\tADD COLUMN IF NOT EXISTS lease_owner text,\n\t\t\t\tADD COLUMN IF NOT EXISTS lease_expires_at timestamptz,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_route text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_risk_tier text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_reason text,\n\t\t\t\tADD COLUMN IF NOT EXISTS hitl_policy_version text,\n\t\t\t\tADD COLUMN IF NOT EXISTS approval_decision jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS mutation_footprint jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS execution_principal jsonb,\n\t\t\t\tADD COLUMN IF NOT EXISTS runtime_evidence jsonb;\n\t\t\tCREATE UNIQUE INDEX IF NOT EXISTS action_invocations_idempotency_idx\n\t\t\t\tON fabric_platform.action_invocations\n\t\t\t\t(tenant_id, space_id, action_id, idempotency_key)\n\t\t\t\tWHERE idempotency_key IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_parameter_digest_idx\n\t\t\t\tON fabric_platform.action_invocations (tenant_id, parameter_digest)\n\t\t\t\tWHERE parameter_digest IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_authority_binding_idx\n\t\t\t\tON fabric_platform.action_invocations (tenant_id, authorization_binding_id)\n\t\t\t\tWHERE authorization_binding_id IS NOT NULL;\n\t\t\tCREATE INDEX IF NOT EXISTS action_invocations_worker_idx\n\t\t\t\tON fabric_platform.action_invocations (status, lease_expires_at, created_at);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.policy_evaluations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, outcome jsonb NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.adapter_invocations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, adapter_type text NOT NULL,\n\t\t\t\toperation text NOT NULL, vendor text NOT NULL, status text NOT NULL,\n\t\t\t\tinput jsonb NOT NULL, output jsonb, error text, attempt integer NOT NULL,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.policy_obligations (\n\t\t\t\taction_invocation_id text NOT NULL, id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, type text NOT NULL,\n\t\t\t\tstatus text NOT NULL, required boolean NOT NULL DEFAULT true,\n\t\t\t\tdescription text, evidence_references jsonb, metadata jsonb,\n\t\t\t\tcreated_at timestamptz NOT NULL, updated_at timestamptz NOT NULL,\n\t\t\t\tPRIMARY KEY (action_invocation_id,id)\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.execution_attestations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, adapter_invocation_id text,\n\t\t\t\tattestation jsonb NOT NULL, recorded_at timestamptz NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.external_reconciliations (\n\t\t\t\tid text PRIMARY KEY, action_invocation_id text NOT NULL,\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\treconciliation jsonb NOT NULL\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.event_sequences (\n\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, next_sequence bigint NOT NULL,\n\t\t\t\tPRIMARY KEY (tenant_id, space_id)\n\t\t\t);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.asset_events (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\tevent_type text NOT NULL, event_schema_version integer NOT NULL,\n\t\t\t\tsubject_type text NOT NULL, subject_id text NOT NULL,\n\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, action_invocation_id text,\n\t\t\t\tpayload jsonb NOT NULL, sequence bigint NOT NULL,\n\t\t\t\toccurred_at timestamptz NOT NULL, recorded_at timestamptz NOT NULL,\n\t\t\t\tcorrelation_id text NOT NULL, causation_id text, provenance jsonb, consistency text,\n\t\t\t\tUNIQUE (tenant_id, space_id, sequence)\n\t\t\t);\n\t\t\tALTER TABLE fabric_platform.asset_events ADD COLUMN IF NOT EXISTS provenance jsonb;\n\t\t\tALTER TABLE fabric_platform.asset_events ADD COLUMN IF NOT EXISTS consistency text;\n\t\t\tCREATE INDEX IF NOT EXISTS asset_events_subject_idx\n\t\t\t\tON fabric_platform.asset_events\n\t\t\t\t(tenant_id, space_id, subject_type, subject_id, sequence);\n\t\t\tCREATE TABLE IF NOT EXISTS fabric_platform.event_outbox (\n\t\t\t\tid text PRIMARY KEY, tenant_id text NOT NULL, space_id text NOT NULL,\n\t\t\t\tevent jsonb NOT NULL, status text NOT NULL DEFAULT 'pending',\n\t\t\t\tattempt_count integer NOT NULL DEFAULT 0, available_at timestamptz NOT NULL,\n\t\t\t\tlease_owner text, lease_expires_at timestamptz, last_error text,\n\t\t\t\tcreated_at timestamptz NOT NULL, published_at timestamptz\n\t\t\t);\n\t\t\tCREATE INDEX IF NOT EXISTS event_outbox_claim_idx\n\t\t\t\tON fabric_platform.event_outbox (status, available_at, lease_expires_at, created_at);\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 2,\n\t\t\tname: \"lease_fencing\",\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\t\tADD COLUMN lease_token bigint NOT NULL DEFAULT 0;\n\t\t\t\tALTER TABLE fabric_platform.event_outbox\n\t\t\t\t\tADD COLUMN lease_token bigint NOT NULL DEFAULT 0;\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 3,\n\t\t\tname: \"external_completion\",\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\t\tADD COLUMN pending_completion jsonb,\n\t\t\t\t\tADD COLUMN external_completion jsonb,\n\t\t\t\t\tADD COLUMN completion_due_at timestamptz;\n\t\t\t\tCREATE INDEX action_invocations_completion_due_idx\n\t\t\t\t\tON fabric_platform.action_invocations (completion_due_at)\n\t\t\t\t\tWHERE completion_due_at IS NOT NULL;\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 4,\n\t\t\tname: \"outbox_actor_disclosure\",\n\t\t\t// Nullable with no default, so rows written before this migration stay NULL and read back\n\t\t\t// as legacy. NOT VALID skips scanning existing rows; the check still applies to every\n\t\t\t// insert and update from here on.\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.event_outbox\n\t\t\t\t\tADD COLUMN actor_disclosure text;\n\t\t\t\tALTER TABLE fabric_platform.event_outbox\n\t\t\t\t\tADD CONSTRAINT event_outbox_actor_disclosure_check\n\t\t\t\t\tCHECK (actor_disclosure IN ('included', 'suppressed')) NOT VALID;\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 5,\n\t\t\tname: \"outbox_requeue\",\n\t\t\tsql: `\n\t\t\t\tCREATE TABLE fabric_platform.event_outbox_requeues (\n\t\t\t\t\tid text PRIMARY KEY, outbox_id text NOT NULL,\n\t\t\t\t\ttenant_id text NOT NULL, space_id text NOT NULL, event_id text NOT NULL,\n\t\t\t\t\tactor_id text NOT NULL, actor_type text NOT NULL, reason text NOT NULL,\n\t\t\t\t\trequeued_at timestamptz NOT NULL, available_at timestamptz NOT NULL,\n\t\t\t\t\tprior_attempt_count integer NOT NULL, prior_last_error text,\n\t\t\t\t\tprior_available_at timestamptz NOT NULL, prior_lease_token bigint NOT NULL\n\t\t\t\t);\n\t\t\t\tCREATE INDEX event_outbox_requeues_record_idx\n\t\t\t\t\tON fabric_platform.event_outbox_requeues (tenant_id, space_id, outbox_id, requeued_at);\n\t\t\t`,\n\t\t}, {\n\t\t\tversion: 6,\n\t\t\tname: \"invocation_admission\",\n\t\t\t// Nullable with no default: rows written before this migration, and\n\t\t\t// rows of actions that declare no admission check, stay NULL.\n\t\t\tsql: `\n\t\t\t\tALTER TABLE fabric_platform.action_invocations\n\t\t\t\t\tADD COLUMN admitted_at timestamptz;\n\t\t\t`,\n\t\t}]);\n\t}\n\n\tasync transaction<TResult>(run: (db: TDb) => Promise<TResult>): Promise<TResult> {\n\t\treturn run(this.db);\n\t}\n\n\tasync createActionInvocation(\n\t\tinput: CreateActionInvocationInput,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst now = new Date();\n\t\t// `admitted_at` (migration 6) is named only for an admitted invocation,\n\t\t// so an invocation of an action without admitSubmission is written with\n\t\t// the same statement as before migration 6 and needs no new column.\n\t\tconst admitted = input.admittedAt !== undefined;\n\t\tconst admittedColumn = admitted ? \"admitted_at,\" : \"\";\n\t\tconst admittedValue = admitted ? \"$25,\" : \"\";\n\t\tlet result;\n\t\ttry {\n\t\t\tresult = await this.sql.query<Record<string, unknown>>(\n\t\t\t\t`INSERT INTO fabric_platform.action_invocations\n\t\t\t\t (id,tenant_id,space_id,action_id,action_version,actor_id,actor_type,status,\n\t\t\t\t\t parameters,result,correlation_id,causation_id,idempotency_key,\n\t\t\t\t\t parameter_digest,parameter_digest_algorithm,idempotency_actor_id,\n\t\t\t\t\t idempotency_authorization_binding_id,invocation_provenance,authorization_binding,execution_reason,\n\t\t\t\t\t authorization_binding_id,error,runtime_evidence,${admittedColumn}created_at,updated_at)\n\t\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14,$15,$16,$17,$18::jsonb,$19::jsonb,$20,$21,$22,$23::jsonb,${admittedValue}$24,$24)\n\t\t\t\t ON CONFLICT (tenant_id,space_id,action_id,idempotency_key)\n\t\t\t\t WHERE idempotency_key IS NOT NULL DO UPDATE SET id=fabric_platform.action_invocations.id\n\t\t\t\t RETURNING *`,\n\t\t\t\t[\n\t\t\t\t\tinput.id, input.tenantId, input.spaceId, input.actionId, input.actionVersion,\n\t\t\t\t\tinput.actorId, input.actorType, input.status, JSON.stringify(input.parameters),\n\t\t\t\t\tJSON.stringify(input.result), input.correlationId, input.causationId ?? null,\n\t\t\t\t\tinput.idempotencyKey ?? null, input.parameterDigest ?? null,\n\t\t\t\t\tinput.parameterDigestAlgorithm ?? null, input.idempotencyActorId ?? null,\n\t\t\t\t\tinput.idempotencyAuthorizationBindingId ?? null,\n\t\t\t\t\tinput.provenance ? JSON.stringify(input.provenance) : null,\n\t\t\t\t\tinput.authorizationBinding ? JSON.stringify(input.authorizationBinding) : null,\n\t\t\t\t\tinput.executionReason ?? null, input.authorizationBindingId ?? null,\n\t\t\t\t\tinput.error ?? null, input.runtimeEvidence ? JSON.stringify(input.runtimeEvidence) : null, now,\n\t\t\t\t\t...(admitted ? [input.admittedAt] : []),\n\t\t\t\t],\n\t\t\t);\n\t\t} catch (error) {\n\t\t\t// 42703 undefined_column: the schema predates migration 6.\n\t\t\tif (admitted && (error as { code?: unknown } | null)?.code === \"42703\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"An admitted invocation needs the action_invocations.admitted_at column; run ensureSchema() to apply PostgreSQL migration 6 (invocation_admission) before submitting actions that declare admitSubmission.\",\n\t\t\t\t\t{ cause: error },\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn toActionRecord(result.rows[0]!);\n\t}\n\n\tasync getActionInvocation(id: string, tenantId: string, spaceId: string) {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.action_invocations\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toActionRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync updateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: ActionInvocationPatch,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t status=COALESCE($4,status), result=COALESCE($5::jsonb,result),\n\t\t\t error=CASE WHEN $6::boolean THEN $7 ELSE error END,\n\t\t\t authorization_reconciliation=CASE WHEN $8::boolean THEN $9::jsonb ELSE authorization_reconciliation END,\n\t\t\t adapter_reconciliation=CASE WHEN $10::boolean THEN $11::jsonb ELSE adapter_reconciliation END,\n\t\t\t pending_completion=CASE WHEN $12::boolean THEN $13::jsonb ELSE pending_completion END,\n\t\t\t completion_due_at=CASE WHEN $12::boolean THEN ($13::jsonb->>'dueAt')::timestamptz ELSE completion_due_at END,\n\t\t\t external_completion=CASE WHEN $14::boolean THEN $15::jsonb ELSE external_completion END,\n\t\t\t lease_owner=CASE WHEN ($13::jsonb IS NOT NULL AND $4='running') OR $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_owner END,\n\t\t\t lease_expires_at=CASE WHEN ($13::jsonb IS NOT NULL AND $4='running') OR $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_expires_at END,\n\t\t\t updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId, patch.status ?? null,\n\t\t\t patch.result === undefined ? null : JSON.stringify(patch.result),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null,\n\t\t\t Object.hasOwn(patch, \"authorizationReconciliation\"),\n\t\t\t patch.authorizationReconciliation ? JSON.stringify(patch.authorizationReconciliation) : null,\n\t\t\t Object.hasOwn(patch, \"adapterReconciliation\"),\n\t\t\t patch.adapterReconciliation ? JSON.stringify(patch.adapterReconciliation) : null,\n\t\t\t Object.hasOwn(patch, \"pendingCompletion\"),\n\t\t\t patch.pendingCompletion ? JSON.stringify(patch.pendingCompletion) : null,\n\t\t\t Object.hasOwn(patch, \"externalCompletion\"),\n\t\t\t patch.externalCompletion ? JSON.stringify(patch.externalCompletion) : null],\n\t\t);\n\t}\n\n\tasync recordHitlDecision(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tdecision: HitlDecisionEvidence,\n\t): Promise<ActionInvocationRecord> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t hitl_route=$4, hitl_risk_tier=$5, hitl_reason=$6,\n\t\t\t hitl_policy_version=$7, updated_at=$8\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t RETURNING *`,\n\t\t\t[\n\t\t\t\tactionInvocationId,\n\t\t\t\ttenantId,\n\t\t\t\tspaceId,\n\t\t\t\tdecision.route,\n\t\t\t\tdecision.riskTier,\n\t\t\t\tdecision.reason,\n\t\t\t\tdecision.policyVersion ?? null,\n\t\t\t\tdecision.evaluatedAt,\n\t\t\t],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\treturn toActionRecord(row);\n\t}\n\n\tasync beginApprovalDecision(\n\t\tinput: BeginApprovalDecisionInput,\n\t): Promise<ApprovalDecisionTransitionResult> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t approval_decision=$4::jsonb,\n\t\t\t status=CASE WHEN $5::boolean THEN 'running' ELSE 'failed' END,\n\t\t\t error=CASE WHEN $5::boolean THEN NULL ELSE $6 END,\n\t\t\t lease_owner=CASE WHEN $5::boolean THEN $7 ELSE NULL END,\n\t\t\t lease_expires_at=CASE WHEN $5::boolean THEN $8::timestamptz ELSE NULL END,\n\t\t\t lease_token=CASE WHEN $5::boolean THEN lease_token+1 ELSE lease_token END,\n\t\t\t attempt_count=CASE WHEN $5::boolean THEN GREATEST(attempt_count,1) ELSE attempt_count END,\n\t\t\t updated_at=$9\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3 AND status='waiting_for_approval'\n\t\t\t RETURNING *`,\n\t\t\t[\n\t\t\t\tinput.actionInvocationId,\n\t\t\t\tinput.tenantId,\n\t\t\t\tinput.spaceId,\n\t\t\t\tJSON.stringify({ ...input.decision, decidedAt: input.decision.decidedAt.toISOString() }),\n\t\t\t\tinput.decision.approved,\n\t\t\t\t`Approval rejected: ${input.decision.reason ?? \"no reason provided\"}`,\n\t\t\t\tinput.leaseOwner,\n\t\t\t\tnew Date(input.now.getTime() + input.leaseDurationMs),\n\t\t\t\tinput.now,\n\t\t\t],\n\t\t);\n\t\treturn result.rows[0]\n\t\t\t? { applied: true, invocation: toActionRecord(result.rows[0]) }\n\t\t\t: { applied: false };\n\t}\n\n\tasync appendPolicyEvaluation(record: PolicyEvaluationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.policy_evaluations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,outcome,created_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5::jsonb,$6) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t JSON.stringify(record.outcome), record.createdAt],\n\t\t);\n\t}\n\n\tasync recordMutationGovernance(actionInvocationId: string, tenantId: string, spaceId: string, context: { footprint: NonNullable<ActionInvocationRecord[\"mutationFootprint\"]>; executionPrincipal: NonNullable<ActionInvocationRecord[\"executionPrincipal\"]> }): Promise<ActionInvocationRecord> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`UPDATE fabric_platform.action_invocations SET mutation_footprint=$4::jsonb,\n\t\t\t execution_principal=$5::jsonb, updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3 RETURNING *`,\n\t\t\t[actionInvocationId, tenantId, spaceId, JSON.stringify(context.footprint), JSON.stringify(context.executionPrincipal)],\n\t\t);\n\t\tif (!result.rows[0]) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\treturn toActionRecord(result.rows[0]);\n\t}\n\n\tasync appendPolicyObligations(records: PolicyObligationRecord[]): Promise<void> {\n\t\tfor (const record of records) {\n\t\t\tawait this.sql.query(\n\t\t\t\t`INSERT INTO fabric_platform.policy_obligations\n\t\t\t\t (action_invocation_id,id,tenant_id,space_id,type,status,required,description,evidence_references,metadata,created_at,updated_at)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12)\n\t\t\t\t ON CONFLICT (action_invocation_id,id) DO NOTHING`,\n\t\t\t\t[record.actionInvocationId, record.id, record.tenantId, record.spaceId, record.type, record.status,\n\t\t\t\t record.required ?? true, record.description ?? null,\n\t\t\t\t record.evidenceReferences ? JSON.stringify(record.evidenceReferences) : null,\n\t\t\t\t record.metadata ? JSON.stringify(record.metadata) : null, record.createdAt, record.updatedAt],\n\t\t\t);\n\t\t}\n\t}\n\n\tasync listPolicyObligations(actionInvocationId: string, tenantId: string, spaceId: string): Promise<PolicyObligationRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.policy_obligations WHERE action_invocation_id=$1 AND tenant_id=$2 AND space_id=$3 ORDER BY created_at,id`,\n\t\t\t[actionInvocationId, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toObligationRecord);\n\t}\n\n\tasync updatePolicyObligation(actionInvocationId: string, obligationId: string, status: PolicyObligationRecord[\"status\"], evidenceReferences?: PolicyObligationRecord[\"evidenceReferences\"]): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.policy_obligations SET status=$3,\n\t\t\t evidence_references=COALESCE($4::jsonb,evidence_references), updated_at=now()\n\t\t\t WHERE action_invocation_id=$1 AND id=$2`,\n\t\t\t[actionInvocationId, obligationId, status, evidenceReferences ? JSON.stringify(evidenceReferences) : null],\n\t\t);\n\t}\n\n\tasync appendExecutionAttestation(record: ExecutionAttestationRecord): Promise<void> {\n\t\tconst { id, actionInvocationId, tenantId, spaceId, adapterInvocationId, recordedAt, ...attestation } = record;\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.execution_attestations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,adapter_invocation_id,attestation,recorded_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6::jsonb,$7) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[id, actionInvocationId, tenantId, spaceId, adapterInvocationId ?? null, JSON.stringify(attestation), recordedAt],\n\t\t);\n\t}\n\n\tasync listExecutionAttestations(actionInvocationId: string, tenantId: string, spaceId: string): Promise<ExecutionAttestationRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.execution_attestations WHERE action_invocation_id=$1 AND tenant_id=$2 AND space_id=$3 ORDER BY recorded_at,id`,\n\t\t\t[actionInvocationId, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toAttestationRecord);\n\t}\n\n\tasync appendExternalReconciliation(record: ExternalReconciliationRecord): Promise<void> {\n\t\tconst { id, actionInvocationId, tenantId, spaceId, ...reconciliation } = record;\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.external_reconciliations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,reconciliation)\n\t\t\t VALUES ($1,$2,$3,$4,$5::jsonb) ON CONFLICT (id) DO NOTHING`,\n\t\t\t[id, actionInvocationId, tenantId, spaceId, JSON.stringify(reconciliation)],\n\t\t);\n\t}\n\n\tasync createAdapterInvocation(record: AdapterInvocationRecord): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.adapter_invocations\n\t\t\t (id,action_invocation_id,tenant_id,space_id,adapter_type,operation,vendor,status,\n\t\t\t input,output,error,attempt,created_at,updated_at)\n\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12,$13,$14)\n\t\t\t ON CONFLICT (id) DO NOTHING`,\n\t\t\t[record.id, record.actionInvocationId, record.tenantId, record.spaceId,\n\t\t\t record.adapterType, record.operation, record.vendor, record.status,\n\t\t\t JSON.stringify(record.input), record.output ? JSON.stringify(record.output) : null,\n\t\t\t record.error ?? null, record.attempt, record.createdAt, record.updatedAt],\n\t\t);\n\t}\n\n\tasync getAdapterInvocation(id: string): Promise<AdapterInvocationRecord | undefined> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.adapter_invocations WHERE id=$1`,\n\t\t\t[id],\n\t\t);\n\t\treturn result.rows[0] ? toAdapterRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync updateAdapterInvocation(\n\t\tid: string,\n\t\tpatch: Partial<\n\t\t\tPick<AdapterInvocationRecord, \"status\" | \"output\" | \"error\" | \"attempt\" | \"updatedAt\">\n\t\t>,\n\t): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`UPDATE fabric_platform.adapter_invocations SET\n\t\t\t status=COALESCE($2,status), output=COALESCE($3::jsonb,output),\n\t\t\t error=CASE WHEN $4::boolean THEN $5 ELSE error END,\n\t\t\t attempt=COALESCE($6,attempt), updated_at=COALESCE($7,now()) WHERE id=$1`,\n\t\t\t[id, patch.status ?? null,\n\t\t\t patch.output === undefined ? null : JSON.stringify(patch.output),\n\t\t\t Object.hasOwn(patch, \"error\"), patch.error ?? null, patch.attempt ?? null,\n\t\t\t patch.updatedAt ?? null],\n\t\t);\n\t}\n\n\tasync appendEvent(event: AssetEventEnvelope): Promise<void> {\n\t\tawait this.sql.query(\n\t\t\t`INSERT INTO fabric_platform.asset_events\n\t\t\t (id,tenant_id,space_id,event_type,event_schema_version,subject_type,subject_id,\n\t\t\t actor_id,actor_type,action_invocation_id,payload,sequence,occurred_at,recorded_at,\n\t\t\t correlation_id,causation_id,provenance,consistency)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16,$17::jsonb,$18)\n\t\t\t\t ON CONFLICT (id) DO NOTHING`,\n\t\t\t[event.id, event.tenantId, event.spaceId, event.eventType, event.eventSchemaVersion,\n\t\t\t event.subjectType, event.subjectId, event.actorId, event.actorType,\n\t\t\t event.actionInvocationId ?? null, JSON.stringify(event.payload), event.sequence,\n\t\t\t event.occurredAt, event.recordedAt, event.correlationId, event.causationId ?? null,\n\t\t\t event.provenance ? JSON.stringify(event.provenance) : null, event.consistency ?? null],\n\t\t);\n\t}\n\n\tasync appendEventWithOutbox(event: AssetEventEnvelope, metadata: OutboxEventMetadata): Promise<void> {\n\t\tconst envelope = toEnterpriseEventEnvelope(event, metadata);\n\t\tawait this.sql.query(\n\t\t\t`WITH inserted_event AS (\n\t\t\t\tINSERT INTO fabric_platform.asset_events\n\t\t\t\t (id,tenant_id,space_id,event_type,event_schema_version,subject_type,subject_id,\n\t\t\t\t actor_id,actor_type,action_invocation_id,payload,sequence,occurred_at,recorded_at,\n\t\t\t\t correlation_id,causation_id,provenance,consistency)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16,$17::jsonb,$19)\n\t\t\t\t ON CONFLICT (id) DO NOTHING RETURNING id\n\t\t\t)\n\t\t\tINSERT INTO fabric_platform.event_outbox\n\t\t\t (id,tenant_id,space_id,event,actor_disclosure,status,attempt_count,available_at,created_at)\n\t\t\tSELECT $1,$2,$3,$18::jsonb,$20,'pending',0,$14,$14 FROM inserted_event\n\t\t\tON CONFLICT (id) DO NOTHING`,\n\t\t\t[event.id, event.tenantId, event.spaceId, event.eventType, event.eventSchemaVersion,\n\t\t\t event.subjectType, event.subjectId, event.actorId, event.actorType,\n\t\t\t event.actionInvocationId ?? null, JSON.stringify(event.payload), event.sequence,\n\t\t\t event.occurredAt, event.recordedAt, event.correlationId, event.causationId ?? null,\n\t\t\t event.provenance ? JSON.stringify(event.provenance) : null, JSON.stringify(envelope), event.consistency ?? null,\n\t\t\t outboxActorDisclosure(metadata)],\n\t\t);\n\t}\n\n\tasync claimOutbox(input: ClaimOutboxInput): Promise<OutboxRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`WITH claimable AS (\n\t\t\t\tSELECT id FROM fabric_platform.event_outbox\n\t\t\t\tWHERE status='pending' AND available_at <= $1\n\t\t\t\t AND (lease_expires_at IS NULL OR lease_expires_at <= $1)\n\t\t\t\t AND ($2::text IS NULL OR tenant_id=$2)\n\t\t\t\t AND ($3::text IS NULL OR space_id=$3)\n\t\t\t\tORDER BY created_at,id FOR UPDATE SKIP LOCKED LIMIT $4\n\t\t\t)\n\t\t\tUPDATE fabric_platform.event_outbox AS item\n\t\t\tSET lease_owner=$5, lease_expires_at=$6, lease_token=lease_token+1,\n\t\t\t attempt_count=attempt_count+1\n\t\t\tFROM claimable WHERE item.id=claimable.id RETURNING item.*`,\n\t\t\t[current, input.tenantId ?? null, input.spaceId ?? null, Math.max(1, Math.min(input.limit ?? 100, 1_000)), input.workerId, leaseExpiresAt],\n\t\t);\n\t\treturn result.rows.map(toOutboxRecord);\n\t}\n\n\tasync markOutboxPublished(id: string, workerId: string, publishedAt: Date, leaseToken?: number): Promise<void> {\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET status='published',published_at=$3,\n\t\t\t lease_owner=NULL,lease_expires_at=NULL\n\t\t\t WHERE id=$1 AND lease_owner=$2 AND lease_token=COALESCE($4,0) RETURNING id`,\n\t\t\t[id, workerId, publishedAt, leaseToken ?? null],\n\t\t);\n\t\tif (result.rows.length === 0) throw new Error(`Outbox record ${id} is not leased by ${workerId}.`);\n\t}\n\n\tasync markOutboxFailed(input: { id: string; workerId: string; leaseToken?: number; error: string; availableAt: Date; deadLetter: boolean }): Promise<void> {\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET status=$3,last_error=$4,available_at=$5,\n\t\t\t lease_owner=NULL,lease_expires_at=NULL\n\t\t\t WHERE id=$1 AND lease_owner=$2 AND lease_token=COALESCE($6,0) RETURNING id`,\n\t\t\t[input.id, input.workerId, input.deadLetter ? \"dead_letter\" : \"pending\", input.error, input.availableAt, input.leaseToken ?? null],\n\t\t);\n\t\tif (result.rows.length === 0) throw new Error(`Outbox record ${input.id} is not leased by ${input.workerId}.`);\n\t}\n\n\tasync renewOutboxLease(input: { id: string; workerId: string; leaseToken: number; leaseDurationMs: number; now?: Date }): Promise<boolean> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.event_outbox SET lease_expires_at=$5\n\t\t\t WHERE id=$1 AND status='pending' AND lease_owner=$2 AND lease_token=$3\n\t\t\t AND lease_expires_at > $4\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.workerId, input.leaseToken,\n\t\t\t\tcurrent, new Date(current.getTime() + input.leaseDurationMs)],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync listOutbox(input: { tenantId?: string; spaceId?: string; statuses?: OutboxStatus[] } = {}): Promise<OutboxRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.event_outbox\n\t\t\t WHERE ($1::text IS NULL OR tenant_id=$1) AND ($2::text IS NULL OR space_id=$2)\n\t\t\t AND ($3::text[] IS NULL OR status=ANY($3::text[])) ORDER BY created_at,id`,\n\t\t\t[input.tenantId ?? null, input.spaceId ?? null, input.statuses?.length ? input.statuses : null],\n\t\t);\n\t\treturn result.rows.map(toOutboxRecord);\n\t}\n\n\tasync getOutboxRecord(id: string, tenantId: string, spaceId: string): Promise<OutboxRecord | undefined> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.event_outbox\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toOutboxRecord(result.rows[0]) : undefined;\n\t}\n\n\tasync requeueOutboxDeadLetter(input: RequeueOutboxDeadLetterStoreInput): Promise<RequeueOutboxDeadLetterStoreResult> {\n\t\t// One statement, so the transition and its evidence commit together. The\n\t\t// row lock re-reads status and lease token after a concurrent writer\n\t\t// commits, so of two racing requeues exactly one sees the dead letter it\n\t\t// was authorized for; the other writes nothing. Every claim increments\n\t\t// lease_token, so a record dead-lettered again since the caller read it\n\t\t// no longer matches.\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`WITH prior AS (\n\t\t\t\tSELECT id, tenant_id, space_id, event->>'eventId' AS event_id,\n\t\t\t\t attempt_count, last_error, available_at, lease_token\n\t\t\t\tFROM fabric_platform.event_outbox\n\t\t\t\tWHERE id=$1 AND tenant_id=$2 AND space_id=$3 AND status='dead_letter'\n\t\t\t\t AND lease_token=$10\n\t\t\t\tFOR UPDATE\n\t\t\t), requeued AS (\n\t\t\t\tUPDATE fabric_platform.event_outbox AS item\n\t\t\t\tSET status='pending', attempt_count=0, available_at=$9,\n\t\t\t\t lease_owner=NULL, lease_expires_at=NULL\n\t\t\t\tFROM prior WHERE item.id=prior.id\n\t\t\t\tRETURNING item.*\n\t\t\t), evidence AS (\n\t\t\t\tINSERT INTO fabric_platform.event_outbox_requeues\n\t\t\t\t (id,outbox_id,tenant_id,space_id,event_id,actor_id,actor_type,reason,\n\t\t\t\t requeued_at,available_at,prior_attempt_count,prior_last_error,\n\t\t\t\t prior_available_at,prior_lease_token)\n\t\t\t\tSELECT $4,prior.id,prior.tenant_id,prior.space_id,prior.event_id,$5,$6,$7,\n\t\t\t\t $8,$9,prior.attempt_count,prior.last_error,prior.available_at,prior.lease_token\n\t\t\t\tFROM prior JOIN requeued ON requeued.id=prior.id\n\t\t\t\tRETURNING *\n\t\t\t)\n\t\t\tSELECT requeued.*,\n\t\t\t evidence.id AS requeue_id, evidence.outbox_id AS requeue_outbox_id,\n\t\t\t evidence.tenant_id AS requeue_tenant_id, evidence.space_id AS requeue_space_id,\n\t\t\t evidence.event_id AS requeue_event_id, evidence.actor_id AS requeue_actor_id,\n\t\t\t evidence.actor_type AS requeue_actor_type, evidence.reason AS requeue_reason,\n\t\t\t evidence.requeued_at AS requeue_requeued_at, evidence.available_at AS requeue_available_at,\n\t\t\t evidence.prior_attempt_count AS requeue_prior_attempt_count,\n\t\t\t evidence.prior_last_error AS requeue_prior_last_error,\n\t\t\t evidence.prior_available_at AS requeue_prior_available_at,\n\t\t\t evidence.prior_lease_token AS requeue_prior_lease_token\n\t\t\tFROM requeued JOIN evidence ON evidence.outbox_id=requeued.id`,\n\t\t\t[input.id, input.tenantId, input.spaceId, input.requeueId, input.actorId,\n\t\t\t input.actorType, input.reason, input.requeuedAt, input.availableAt, input.expectedLeaseToken],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (row) {\n\t\t\treturn {\n\t\t\t\tapplied: true,\n\t\t\t\trecord: toOutboxRecord(row),\n\t\t\t\trequeue: toOutboxRequeueRecord(row, \"requeue_\"),\n\t\t\t};\n\t\t}\n\t\tconst current = await this.sql.query<{ status: string }>(\n\t\t\t`SELECT status FROM fabric_platform.event_outbox\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[input.id, input.tenantId, input.spaceId],\n\t\t);\n\t\tconst found = current.rows[0];\n\t\tif (!found) return { applied: false, refusal: \"not_found\" };\n\t\tconst status = found.status as OutboxStatus;\n\t\t// The statement refused, yet the row is a dead letter: it is a later\n\t\t// generation, since a record only returns to dead_letter through a claim\n\t\t// and every claim moves the lease token past the one the caller read.\n\t\treturn status === \"dead_letter\"\n\t\t\t? { applied: false, refusal: \"stale\", currentStatus: status }\n\t\t\t: { applied: false, refusal: \"not_dead_letter\", currentStatus: status };\n\t}\n\n\tasync listOutboxRequeues(input: { tenantId: string; spaceId: string; outboxId?: string }): Promise<OutboxRequeueRecord[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.event_outbox_requeues\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 AND ($3::text IS NULL OR outbox_id=$3)\n\t\t\t ORDER BY requeued_at,id`,\n\t\t\t[input.tenantId, input.spaceId, input.outboxId ?? null],\n\t\t);\n\t\treturn result.rows.map((row) => toOutboxRequeueRecord(row, \"\"));\n\t}\n\n\tasync nextEventSequence(tenantId: string, spaceId: string): Promise<number> {\n\t\tconst result = await this.sql.query<{ next_sequence: string | number }>(\n\t\t\t`INSERT INTO fabric_platform.event_sequences (tenant_id,space_id,next_sequence)\n\t\t\t VALUES ($1,$2,1) ON CONFLICT (tenant_id,space_id) DO UPDATE\n\t\t\t SET next_sequence=fabric_platform.event_sequences.next_sequence+1\n\t\t\t RETURNING next_sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn Number(result.rows[0]!.next_sequence);\n\t}\n\n\tasync getEntityState(\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tentityType: string,\n\t\tentityId: string,\n\t) {\n\t\tconst result = await this.sql.query<{ state?: string }>(\n\t\t\t`SELECT payload->>'toState' AS state FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 AND subject_type=$3 AND subject_id=$4\n\t\t\t AND payload ? 'toState' ORDER BY sequence DESC LIMIT 1`,\n\t\t\t[tenantId, spaceId, entityType, entityId],\n\t\t);\n\t\treturn result.rows[0]?.state;\n\t}\n\n\tasync listActionInvocations(\n\t\tinput: ListActionInvocationsInput = {},\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst conditions: string[] = [];\n\t\tconst values: unknown[] = [];\n\t\tconst add = (condition: string, value: unknown) => {\n\t\t\tvalues.push(value);\n\t\t\tconditions.push(condition.replace(\"?\", `$${values.length}`));\n\t\t};\n\t\tif (input.tenantId) add(\"tenant_id=?\", input.tenantId);\n\t\tif (input.spaceId) add(\"space_id=?\", input.spaceId);\n\t\tif (input.statuses?.length) add(\"status = ANY(?::text[])\", [...input.statuses]);\n\t\tif (input.updatedBefore) add(\"updated_at<?\", input.updatedBefore);\n\t\tif (input.awaitingCompletion || input.completionDueBefore) conditions.push(\"pending_completion IS NOT NULL\");\n\t\tif (input.completionDueBefore) add(\"completion_due_at <= ?\", input.completionDueBefore);\n\t\tif (input.unleased) conditions.push(\"lease_owner IS NULL\");\n\t\tvalues.push(Math.max(1, Math.min(input.limit ?? 100, 1_000)));\n\t\tconst where = conditions.length ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.action_invocations ${where}\n\t\t\t ORDER BY created_at LIMIT $${values.length}`,\n\t\t\tvalues,\n\t\t);\n\t\treturn result.rows.map(toActionRecord);\n\t}\n\n\tasync getHealthCounts(input: PlatformHostHealthQuery): Promise<PlatformHostHealthCounts> {\n\t\tconst result = await this.sql.query<Record<string, string | number>>(\n\t\t\t`SELECT\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='pending'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_backlog,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='running'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_running,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='running' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $3\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_expired_leases,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='waiting_for_approval'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_approval_waits,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.action_invocations\n\t\t\t\t WHERE status='reconciliation_required'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS invocation_reconciliation_required,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='pending'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_backlog,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='pending' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $3\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_expired_leases,\n\t\t\t\t(SELECT COUNT(*) FROM fabric_platform.event_outbox\n\t\t\t\t WHERE status='dead_letter'\n\t\t\t\t AND ($1::text IS NULL OR tenant_id=$1)\n\t\t\t\t AND ($2::text IS NULL OR space_id=$2)) AS outbox_dead_letters`,\n\t\t\t[input.tenantId ?? null, input.spaceId ?? null, input.now],\n\t\t);\n\t\tconst row = result.rows[0] ?? {};\n\t\treturn {\n\t\t\tinvocationBacklog: Number(row.invocation_backlog ?? 0),\n\t\t\tinvocationRunning: Number(row.invocation_running ?? 0),\n\t\t\tinvocationExpiredLeases: Number(row.invocation_expired_leases ?? 0),\n\t\t\tinvocationApprovalWaits: Number(row.invocation_approval_waits ?? 0),\n\t\t\tinvocationReconciliationRequired: Number(row.invocation_reconciliation_required ?? 0),\n\t\t\toutboxBacklog: Number(row.outbox_backlog ?? 0),\n\t\t\toutboxExpiredLeases: Number(row.outbox_expired_leases ?? 0),\n\t\t\toutboxDeadLetters: Number(row.outbox_dead_letters ?? 0),\n\t\t};\n\t}\n\n\tasync claimActionInvocations(\n\t\tinput: ClaimActionInvocationsInput,\n\t): Promise<ActionInvocationRecord[]> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst limit = Math.max(1, Math.min(input.limit ?? 10, 100));\n\t\tconst leaseExpiresAt = new Date(current.getTime() + input.leaseDurationMs);\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`WITH claimable AS (\n\t\t\t\tSELECT id FROM fabric_platform.action_invocations\n\t\t\t\tWHERE (status='pending' OR\n\t\t\t\t (status='running' AND lease_expires_at IS NOT NULL AND lease_expires_at <= $1))\n\t\t\t\t AND ($2::text IS NULL OR tenant_id=$2)\n\t\t\t\t AND ($3::text IS NULL OR space_id=$3)\n\t\t\t\tORDER BY created_at\n\t\t\t\tFOR UPDATE SKIP LOCKED\n\t\t\t\tLIMIT $4\n\t\t\t)\n\t\t\tUPDATE fabric_platform.action_invocations AS invocation\n\t\t\tSET status='running', lease_owner=$5, lease_expires_at=$6,\n\t\t\t lease_token=lease_token+1, attempt_count=attempt_count+1, updated_at=$1\n\t\t\tFROM claimable WHERE invocation.id=claimable.id\n\t\t\tRETURNING invocation.*`,\n\t\t\t[current, input.tenantId ?? null, input.spaceId ?? null, limit, input.workerId,\n\t\t\t leaseExpiresAt],\n\t\t);\n\t\treturn result.rows.map(toActionRecord);\n\t}\n\n\tasync updateLeasedActionInvocation(input: import(\"./types\").UpdateLeasedActionInvocationInput): Promise<boolean> {\n\t\tconst patch = input.patch;\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations SET\n\t\t\t status=COALESCE($6,status), result=COALESCE($7::jsonb,result),\n\t\t\t error=CASE WHEN $8::boolean THEN $9 ELSE error END,\n\t\t\t authorization_reconciliation=CASE WHEN $10::boolean THEN $11::jsonb ELSE authorization_reconciliation END,\n\t\t\t adapter_reconciliation=CASE WHEN $12::boolean THEN $13::jsonb ELSE adapter_reconciliation END,\n\t\t\t pending_completion=CASE WHEN $14::boolean THEN $15::jsonb ELSE pending_completion END,\n\t\t\t completion_due_at=CASE WHEN $14::boolean THEN ($15::jsonb->>'dueAt')::timestamptz ELSE completion_due_at END,\n\t\t\t external_completion=CASE WHEN $16::boolean THEN $17::jsonb ELSE external_completion END,\n\t\t\t lease_owner=CASE WHEN ($15::jsonb IS NOT NULL AND $6='running') OR $6 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_owner END,\n\t\t\t lease_expires_at=CASE WHEN ($15::jsonb IS NOT NULL AND $6='running') OR $6 IN ('waiting_for_approval','completed','failed','blocked_by_policy','reconciliation_required','validation_failed')\n\t\t\t THEN NULL ELSE lease_expires_at END,\n\t\t\t updated_at=now()\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t AND status='running' AND lease_owner=$4 AND lease_token=$5\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.tenantId, input.spaceId, input.workerId, input.leaseToken,\n\t\t\t\tpatch.status ?? null,\n\t\t\t\tpatch.result === undefined ? null : JSON.stringify(patch.result),\n\t\t\t\tObject.hasOwn(patch, \"error\"), patch.error ?? null,\n\t\t\t\tObject.hasOwn(patch, \"authorizationReconciliation\"),\n\t\t\t\tpatch.authorizationReconciliation ? JSON.stringify(patch.authorizationReconciliation) : null,\n\t\t\t\tObject.hasOwn(patch, \"adapterReconciliation\"),\n\t\t\t\tpatch.adapterReconciliation ? JSON.stringify(patch.adapterReconciliation) : null,\n\t\t\t\tObject.hasOwn(patch, \"pendingCompletion\"),\n\t\t\t\tpatch.pendingCompletion ? JSON.stringify(patch.pendingCompletion) : null,\n\t\t\t\tObject.hasOwn(patch, \"externalCompletion\"),\n\t\t\t\tpatch.externalCompletion ? JSON.stringify(patch.externalCompletion) : null],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync renewActionInvocationLease(input: import(\"./types\").RenewActionInvocationLeaseInput): Promise<boolean> {\n\t\tconst current = input.now ?? new Date();\n\t\tconst result = await this.sql.query(\n\t\t\t`UPDATE fabric_platform.action_invocations\n\t\t\t SET lease_expires_at=$6,updated_at=$5\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3\n\t\t\t AND status='running' AND lease_owner=$4 AND lease_token=$7\n\t\t\t AND lease_expires_at > $5\n\t\t\t RETURNING id`,\n\t\t\t[input.id, input.tenantId, input.spaceId, input.workerId, current,\n\t\t\t\tnew Date(current.getTime() + input.leaseDurationMs), input.leaseToken],\n\t\t);\n\t\treturn result.rows.length === 1;\n\t}\n\n\tasync listEvents(tenantId: string, spaceId: string): Promise<AssetEventEnvelope[]> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.asset_events\n\t\t\t WHERE tenant_id=$1 AND space_id=$2 ORDER BY sequence`,\n\t\t\t[tenantId, spaceId],\n\t\t);\n\t\treturn result.rows.map(toEventRecord);\n\t}\n\n\tasync getEvent(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t): Promise<AssetEventEnvelope | undefined> {\n\t\tconst result = await this.sql.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM fabric_platform.asset_events\n\t\t\t WHERE id=$1 AND tenant_id=$2 AND space_id=$3`,\n\t\t\t[id, tenantId, spaceId],\n\t\t);\n\t\treturn result.rows[0] ? toEventRecord(result.rows[0]) : undefined;\n\t}\n}\n\nfunction toAdapterRecord(row: Record<string, unknown>): AdapterInvocationRecord {\n\treturn {\n\t\tid: String(row.id),\n\t\tactionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id),\n\t\tspaceId: String(row.space_id),\n\t\tadapterType: String(row.adapter_type),\n\t\toperation: String(row.operation),\n\t\tvendor: String(row.vendor),\n\t\tstatus: String(row.status) as AdapterInvocationRecord[\"status\"],\n\t\tinput: row.input as Record<string, unknown>,\n\t\t...(row.output ? { output: row.output as Record<string, unknown> } : {}),\n\t\t...(row.error ? { error: String(row.error) } : {}),\n\t\tattempt: Number(row.attempt),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\tupdatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toPendingCompletion(value: Record<string, unknown>): NonNullable<ActionInvocationRecord[\"pendingCompletion\"]> {\n\treturn {\n\t\t...(value as unknown as NonNullable<ActionInvocationRecord[\"pendingCompletion\"]>),\n\t\tacceptedAt: new Date(value.acceptedAt as string),\n\t\t...(value.dueAt ? { dueAt: new Date(value.dueAt as string) } : {}),\n\t\t...(value.parkedAt ? { parkedAt: new Date(value.parkedAt as string) } : {}),\n\t};\n}\n\nfunction toExternalCompletion(value: Record<string, unknown>): NonNullable<ActionInvocationRecord[\"externalCompletion\"]> {\n\treturn {\n\t\t...(value as unknown as NonNullable<ActionInvocationRecord[\"externalCompletion\"]>),\n\t\trecordedAt: new Date(value.recordedAt as string),\n\t};\n}\n\nfunction toActionRecord(row: Record<string, unknown>): ActionInvocationRecord {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\tactionId: String(row.action_id) as ActionInvocationRecord[\"actionId\"],\n\t\tactionVersion: Number(row.action_version),\n\t\tactorId: String(row.actor_id),\n\t\tactorType: String(row.actor_type) as ActionInvocationRecord[\"actorType\"],\n\t\tstatus: String(row.status) as ActionInvocationRecord[\"status\"],\n\t\tparameters: row.parameters as Record<string, unknown>,\n\t\tresult: row.result as Record<string, unknown>, correlationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t\t...(row.idempotency_key ? { idempotencyKey: String(row.idempotency_key) } : {}),\n\t\t...(row.parameter_digest ? { parameterDigest: String(row.parameter_digest) } : {}),\n\t\t...(row.parameter_digest_algorithm ? { parameterDigestAlgorithm: String(row.parameter_digest_algorithm) as ActionInvocationRecord[\"parameterDigestAlgorithm\"] } : {}),\n\t\t...(row.idempotency_actor_id ? { idempotencyActorId: String(row.idempotency_actor_id) } : {}),\n\t\t...(row.idempotency_authorization_binding_id ? { idempotencyAuthorizationBindingId: String(row.idempotency_authorization_binding_id) } : {}),\n\t\t...(row.invocation_provenance ? { provenance: row.invocation_provenance as NonNullable<ActionInvocationRecord[\"provenance\"]> } : {}),\n\t\t...(row.authorization_binding ? { authorizationBinding: row.authorization_binding as NonNullable<ActionInvocationRecord[\"authorizationBinding\"]> } : {}),\n\t\t...(row.execution_reason ? { executionReason: String(row.execution_reason) } : {}),\n\t\t...(row.authorization_reconciliation ? { authorizationReconciliation: row.authorization_reconciliation as NonNullable<ActionInvocationRecord[\"authorizationReconciliation\"]> } : {}),\n\t\t...(row.adapter_reconciliation ? { adapterReconciliation: row.adapter_reconciliation as NonNullable<ActionInvocationRecord[\"adapterReconciliation\"]> } : {}),\n\t\t...(row.pending_completion ? { pendingCompletion: toPendingCompletion(row.pending_completion as Record<string, unknown>) } : {}),\n\t\t...(row.external_completion ? { externalCompletion: toExternalCompletion(row.external_completion as Record<string, unknown>) } : {}),\n\t\t...(row.authorization_binding_id\n\t\t\t? { authorizationBindingId: String(row.authorization_binding_id) }\n\t\t\t: {}),\n\t\tattemptCount: Number(row.attempt_count ?? 0),\n\t\tleaseToken: Number(row.lease_token ?? 0),\n\t\t...(row.lease_owner ? { leaseOwner: String(row.lease_owner) } : {}),\n\t\t...(row.lease_expires_at\n\t\t\t? { leaseExpiresAt: new Date(row.lease_expires_at as string | Date) }\n\t\t\t: {}),\n\t\t...(row.hitl_route\n\t\t\t? { hitlRoute: String(row.hitl_route) as ActionInvocationRecord[\"hitlRoute\"] }\n\t\t\t: {}),\n\t\t...(row.hitl_risk_tier\n\t\t\t? { hitlRiskTier: String(row.hitl_risk_tier) as ActionInvocationRecord[\"hitlRiskTier\"] }\n\t\t\t: {}),\n\t\t...(row.hitl_reason ? { hitlReason: String(row.hitl_reason) } : {}),\n\t\t...(row.hitl_policy_version\n\t\t\t? { hitlPolicyVersion: String(row.hitl_policy_version) }\n\t\t\t: {}),\n\t\t...(row.approval_decision\n\t\t\t? { approvalDecision: toApprovalDecision(row.approval_decision) }\n\t\t\t: {}),\n\t\t...(row.mutation_footprint\n\t\t\t? { mutationFootprint: row.mutation_footprint as NonNullable<ActionInvocationRecord[\"mutationFootprint\"]> }\n\t\t\t: {}),\n\t\t...(row.execution_principal\n\t\t\t? { executionPrincipal: row.execution_principal as NonNullable<ActionInvocationRecord[\"executionPrincipal\"]> }\n\t\t\t: {}),\n\t\t...(row.runtime_evidence\n\t\t\t? { runtimeEvidence: row.runtime_evidence as NonNullable<ActionInvocationRecord[\"runtimeEvidence\"]> }\n\t\t\t: {}),\n\t\t...(row.admitted_at ? { admittedAt: new Date(row.admitted_at as string | Date) } : {}),\n\t\t...(row.error ? { error: String(row.error) } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\tupdatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toObligationRecord(row: Record<string, unknown>): PolicyObligationRecord {\n\treturn {\n\t\tid: String(row.id), actionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id), spaceId: String(row.space_id), type: String(row.type),\n\t\tstatus: String(row.status) as PolicyObligationRecord[\"status\"], required: Boolean(row.required),\n\t\t...(row.description ? { description: String(row.description) } : {}),\n\t\t...(row.evidence_references ? { evidenceReferences: row.evidence_references as NonNullable<PolicyObligationRecord[\"evidenceReferences\"]> } : {}),\n\t\t...(row.metadata ? { metadata: row.metadata as Record<string, unknown> } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date), updatedAt: new Date(row.updated_at as string | Date),\n\t};\n}\n\nfunction toAttestationRecord(row: Record<string, unknown>): ExecutionAttestationRecord {\n\tconst attestation = row.attestation as Omit<ExecutionAttestationRecord, \"id\" | \"actionInvocationId\" | \"tenantId\" | \"spaceId\" | \"adapterInvocationId\" | \"recordedAt\">;\n\treturn {\n\t\t...attestation, id: String(row.id), actionInvocationId: String(row.action_invocation_id),\n\t\ttenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\t...(row.adapter_invocation_id ? { adapterInvocationId: String(row.adapter_invocation_id) } : {}),\n\t\trecordedAt: new Date(row.recorded_at as string | Date),\n\t};\n}\n\nfunction toApprovalDecision(value: unknown): NonNullable<ActionInvocationRecord[\"approvalDecision\"]> {\n\tconst decision = value as Record<string, unknown>;\n\treturn {\n\t\tapproved: Boolean(decision.approved),\n\t\tapproverId: String(decision.approverId),\n\t\tapproverType: String(decision.approverType) as NonNullable<\n\t\t\tActionInvocationRecord[\"approvalDecision\"]\n\t\t>[\"approverType\"],\n\t\t...(decision.reason ? { reason: String(decision.reason) } : {}),\n\t\t...(decision.editsReference\n\t\t\t? { editsReference: String(decision.editsReference) }\n\t\t\t: {}),\n\t\tdecidedAt: new Date(decision.decidedAt as string | Date),\n\t};\n}\n\nfunction toEventRecord(row: Record<string, unknown>): AssetEventEnvelope {\n\treturn {\n\t\tid: String(row.id), tenantId: String(row.tenant_id), spaceId: String(row.space_id),\n\t\teventType: String(row.event_type), eventSchemaVersion: Number(row.event_schema_version),\n\t\tsubjectType: String(row.subject_type), subjectId: String(row.subject_id),\n\t\tactorId: String(row.actor_id), actorType: String(row.actor_type),\n\t\t...(row.action_invocation_id\n\t\t\t? { actionInvocationId: String(row.action_invocation_id) }\n\t\t\t: {}),\n\t\tpayload: row.payload, sequence: Number(row.sequence),\n\t\toccurredAt: new Date(row.occurred_at as string | Date),\n\t\trecordedAt: new Date(row.recorded_at as string | Date),\n\t\tcorrelationId: String(row.correlation_id),\n\t\t...(row.causation_id ? { causationId: String(row.causation_id) } : {}),\n\t\t...(row.provenance ? { provenance: row.provenance as NonNullable<AssetEventEnvelope[\"provenance\"]> } : {}),\n\t\t...(row.consistency ? { consistency: row.consistency as NonNullable<AssetEventEnvelope[\"consistency\"]> } : {}),\n\t};\n}\n\nfunction toOutboxRecord(row: Record<string, unknown>): OutboxRecord {\n\tconst event = row.event as Record<string, unknown>;\n\t// NULL is a row written before migration 4 (legacy). The column, not the JSON, decides whether\n\t// actor identity is hydrated, so a row that was not opted in never yields an actor.\n\tconst actorDisclosure = row.actor_disclosure === \"included\" || row.actor_disclosure === \"suppressed\"\n\t\t? row.actor_disclosure\n\t\t: undefined;\n\tconst actorIncluded = actorDisclosure === \"included\";\n\treturn {\n\t\tid: String(row.id),\n\t\ttenantId: String(row.tenant_id),\n\t\tspaceId: String(row.space_id),\n\t\t...(actorDisclosure ? { actorDisclosure } : {}),\n\t\tevent: {\n\t\t\teventId: String(event.eventId),\n\t\t\teventType: String(event.eventType),\n\t\t\teventSchemaVersion: Number(event.eventSchemaVersion),\n\t\t\ttenantId: String(event.tenantId),\n\t\t\tspaceId: String(event.spaceId),\n\t\t\tsubjectType: String(event.subjectType),\n\t\t\tsubjectId: String(event.subjectId),\n\t\t\tsequence: Number(event.sequence),\n\t\t\t...(event.actionInvocationId ? { actionInvocationId: String(event.actionInvocationId) } : {}),\n\t\t\tcorrelationId: String(event.correlationId),\n\t\t\t...(event.causationId ? { causationId: String(event.causationId) } : {}),\n\t\t\t...(actorIncluded && event.actorId ? { actorId: String(event.actorId) } : {}),\n\t\t\t...(actorIncluded && event.actorType ? { actorType: String(event.actorType) } : {}),\n\t\t\t...(event.provenance ? { provenance: event.provenance as NonNullable<EnterpriseEventEnvelope[\"provenance\"]> } : {}),\n\t\t\t...(event.consistency ? { consistency: event.consistency as NonNullable<EnterpriseEventEnvelope[\"consistency\"]> } : {}),\n\t\t\toccurredAt: new Date(event.occurredAt as string | Date),\n\t\t\trecordedAt: new Date(event.recordedAt as string | Date),\n\t\t\tproducerModuleVersion: String(event.producerModuleVersion),\n\t\t\tpayloadClassification: String(event.payloadClassification) as OutboxRecord[\"event\"][\"payloadClassification\"],\n\t\t\t...(event.traceContext ? { traceContext: event.traceContext as Record<string, string> } : {}),\n\t\t\tpayload: event.payload,\n\t\t},\n\t\tstatus: String(row.status) as OutboxStatus,\n\t\tattemptCount: Number(row.attempt_count),\n\t\tavailableAt: new Date(row.available_at as string | Date),\n\t\t...(row.lease_owner ? { leaseOwner: String(row.lease_owner) } : {}),\n\t\t...(row.lease_expires_at ? { leaseExpiresAt: new Date(row.lease_expires_at as string | Date) } : {}),\n\t\tleaseToken: Number(row.lease_token ?? 0),\n\t\t...(row.last_error ? { lastError: String(row.last_error) } : {}),\n\t\tcreatedAt: new Date(row.created_at as string | Date),\n\t\t...(row.published_at ? { publishedAt: new Date(row.published_at as string | Date) } : {}),\n\t};\n}\n\nfunction toOutboxRequeueRecord(row: Record<string, unknown>, prefix: string): OutboxRequeueRecord {\n\tconst field = (name: string) => row[`${prefix}${name}`];\n\tconst priorLastError = field(\"prior_last_error\");\n\treturn {\n\t\tid: String(field(\"id\")),\n\t\toutboxId: String(field(\"outbox_id\")),\n\t\ttenantId: String(field(\"tenant_id\")),\n\t\tspaceId: String(field(\"space_id\")),\n\t\teventId: String(field(\"event_id\")),\n\t\tactorId: String(field(\"actor_id\")),\n\t\tactorType: String(field(\"actor_type\")) as OutboxRequeueRecord[\"actorType\"],\n\t\treason: String(field(\"reason\")),\n\t\trequeuedAt: new Date(field(\"requeued_at\") as string | Date),\n\t\tavailableAt: new Date(field(\"available_at\") as string | Date),\n\t\tpriorAttemptCount: Number(field(\"prior_attempt_count\")),\n\t\t...(priorLastError !== null && priorLastError !== undefined ? { priorLastError: String(priorLastError) } : {}),\n\t\tpriorAvailableAt: new Date(field(\"prior_available_at\") as string | Date),\n\t\tpriorLeaseToken: Number(field(\"prior_lease_token\")),\n\t};\n}\n","import type {\n\tActionInvocationRecord,\n\tPlatformActionDispatcher,\n\tPlatformActionWorkerCycleResult,\n\tPlatformActionWorkerOptions,\n} from \"./types\";\nimport {\n\temitPlatformHostTelemetry,\n\tPLATFORM_HOST_METRIC_NAMES,\n\ttype PlatformHostTelemetry,\n\ttype PlatformHostTelemetryAttribute,\n} from \"./observability\";\n\nconst DEFAULT_BATCH_SIZE = 10;\nconst DEFAULT_LEASE_DURATION_MS = 5 * 60_000;\nconst DEFAULT_POLL_INTERVAL_MS = 1_000;\n\n/**\n * Durable store-backed dispatch: the pending invocation row is the queue item.\n * Repeated dispatches are safe because the workflow id is stable per invocation.\n */\nexport function createStoreBackedActionDispatcher(): PlatformActionDispatcher {\n\treturn {\n\t\tdispatch: async (input) => ({ workflowId: input.workflowId }),\n\t};\n}\n\n/** Claim and execute one bounded batch. Safe to run concurrently across workers. */\nexport async function runPlatformActionWorkerCycle<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n): Promise<PlatformActionWorkerCycleResult> {\n\tconst leaseDurationMs = options.leaseDurationMs ?? DEFAULT_LEASE_DURATION_MS;\n\temitWorkerTelemetry(options.telemetry, \"worker.cycle.started\", options.workerId);\n\t// Handoffs past their deadline are findings, not work to claim. The sweep\n\t// runs before the claim so a failure in it strands nothing, and so an\n\t// overdue callback is surfaced even on a cycle that claims nothing.\n\tif (options.sweepOverdueCompletions !== false && typeof options.host.reconcileOverdueCompletions === \"function\") {\n\t\ttry {\n\t\t\tawait options.host.reconcileOverdueCompletions({\n\t\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\toptions.onError?.(error);\n\t\t}\n\t}\n\tlet claimed: ActionInvocationRecord[];\n\ttry {\n\t\tclaimed = await options.store.claimActionInvocations({\n\t\t\tworkerId: options.workerId,\n\t\t\tlimit: options.batchSize ?? DEFAULT_BATCH_SIZE,\n\t\t\tleaseDurationMs,\n\t\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t\t});\n\t} catch (error) {\n\t\temitWorkerTelemetry(options.telemetry, \"worker.cycle.failed\", options.workerId);\n\t\tthrow error;\n\t}\n\tfor (const invocation of claimed) {\n\t\temitPlatformHostTelemetry(options.telemetry, {\n\t\t\tkind: \"event\",\n\t\t\tname: \"invocation.lease_claimed\",\n\t\t\tmetricName: PLATFORM_HOST_METRIC_NAMES.invocationLeaseClaimed,\n\t\t\toccurredAt: new Date(),\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tattributes: { attempt: invocation.attemptCount },\n\t\t});\n\t}\n\tlet completed = 0;\n\tlet failed = 0;\n\tlet waitingForApproval = 0;\n\tfor (const invocation of claimed) {\n\t\tconst stopHeartbeat = startLeaseHeartbeat(options, invocation, leaseDurationMs);\n\t\ttry {\n\t\t\tconst result = await options.host.executeInvocation(\n\t\t\t\tinvocation.id,\n\t\t\t\tinvocation.tenantId,\n\t\t\t\tinvocation.spaceId,\n\t\t\t\t{ leaseOwner: options.workerId, leaseToken: invocation.leaseToken },\n\t\t\t);\n\t\t\tif (result.status === \"completed\") completed += 1;\n\t\t\telse if (result.status === \"waiting_for_approval\") waitingForApproval += 1;\n\t\t\telse failed += 1;\n\t\t} catch (error) {\n\t\t\tfailed += 1;\n\t\t\toptions.onError?.(error, invocation);\n\t\t} finally {\n\t\t\tawait stopHeartbeat();\n\t\t}\n\t}\n\tconst result = {\n\t\tclaimed: claimed.length,\n\t\tcompleted,\n\t\tfailed,\n\t\t...(waitingForApproval > 0 ? { waitingForApproval } : {}),\n\t};\n\temitWorkerTelemetry(options.telemetry, \"worker.cycle.completed\", options.workerId, result);\n\treturn result;\n}\n\nfunction startLeaseHeartbeat<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n\tinvocation: ActionInvocationRecord,\n\tleaseDurationMs: number,\n): () => Promise<void> {\n\tif (!invocation?.leaseToken) return async () => undefined;\n\tconst intervalMs = options.leaseRenewalIntervalMs ??\n\t\tMath.max(1, Math.floor(leaseDurationMs / 3));\n\tlet stopped = false;\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet running: Promise<void> | undefined;\n\tconst schedule = () => {\n\t\tif (!stopped) timer = setTimeout(tick, intervalMs);\n\t};\n\tconst tick = () => {\n\t\trunning = options.store.renewActionInvocationLease({\n\t\t\tid: invocation.id,\n\t\t\ttenantId: invocation.tenantId,\n\t\t\tspaceId: invocation.spaceId,\n\t\t\tworkerId: options.workerId,\n\t\t\tleaseToken: invocation.leaseToken!,\n\t\t\tleaseDurationMs,\n\t\t}).then((renewed) => {\n\t\t\tif (!renewed) options.onError?.(\n\t\t\t\tnew Error(`Invocation lease lost: ${invocation.id}`),\n\t\t\t\tinvocation,\n\t\t\t);\n\t\t}).catch((error: unknown) => options.onError?.(error, invocation))\n\t\t\t.finally(schedule);\n\t};\n\tschedule();\n\treturn async () => {\n\t\tstopped = true;\n\t\tif (timer) clearTimeout(timer);\n\t\tawait running;\n\t};\n}\n\n/** Poll until aborted. Each iteration is bounded and waits without busy-spinning. */\nexport async function runPlatformActionWorker<TDb>(\n\toptions: PlatformActionWorkerOptions<TDb>,\n): Promise<void> {\n\twhile (!options.signal?.aborted) {\n\t\ttry {\n\t\t\tawait runPlatformActionWorkerCycle(options);\n\t\t} catch (error) {\n\t\t\toptions.onError?.(error);\n\t\t}\n\t\tawait abortableDelay(options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS, options.signal);\n\t}\n}\n\nasync function abortableDelay(milliseconds: number, signal?: AbortSignal): Promise<void> {\n\tif (signal?.aborted) return;\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, milliseconds);\n\t\tsignal?.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nfunction emitWorkerTelemetry(\n\ttelemetry: PlatformHostTelemetry | undefined,\n\tname: \"worker.cycle.started\" | \"worker.cycle.completed\" | \"worker.cycle.failed\",\n\tworkerId: string,\n\tattributes?: Record<string, PlatformHostTelemetryAttribute>,\n): void {\n\tconst metricName = name === \"worker.cycle.started\"\n\t\t? PLATFORM_HOST_METRIC_NAMES.workerCyclesStarted\n\t\t: name === \"worker.cycle.completed\"\n\t\t\t? PLATFORM_HOST_METRIC_NAMES.workerCyclesCompleted\n\t\t\t: PLATFORM_HOST_METRIC_NAMES.workerCyclesFailed;\n\temitPlatformHostTelemetry(telemetry, {\n\t\tkind: \"event\",\n\t\tname,\n\t\tmetricName,\n\t\toccurredAt: new Date(),\n\t\tattributes: { workerId, ...attributes },\n\t});\n}\n","import { digestParameters } from \"./command-identity\";\nimport type {\n\tActionInvocationRecord,\n\tAtomicMutationPlatformHostStore,\n\tPlatformHostStore,\n} from \"./types\";\n\nconst TERMINAL_PARENT_STATUSES = new Set<ActionInvocationRecord[\"status\"]>([\n\t\"completed\",\n\t\"failed\",\n\t\"blocked_by_policy\",\n\t\"reconciliation_required\",\n\t\"validation_failed\",\n]);\n\ninterface HostSagaParentLifecycleIdentity {\n\t/** Stable identity shared by every retry of the same lifecycle transition. */\n\tlifecycleId?: string;\n}\n\n/**\n * Durable record of a single step completing within a saga parent.\n * Structurally compatible with {@link import(\"@fabricorg/platform-temporal\").SagaParentProgressRecord}.\n */\nexport interface HostSagaParentProgressRecord {\n\tstepId: string;\n\tindex: number;\n\ttotal: number;\n\tcompletedAt: string;\n}\n\nexport interface HostSagaParentProgressInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tprogress: HostSagaParentProgressRecord;\n}\n\nexport interface HostSagaParentApprovalInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tstepId: string;\n\tapprovalId: string;\n\treason: string;\n}\n\nexport interface HostSagaParentCancellationInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\treason: string;\n\tactorId: string;\n}\n\nexport interface HostSagaParentCompletionInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\tresult: Record<string, unknown>;\n}\n\nexport interface HostSagaParentFailureInput extends HostSagaParentLifecycleIdentity {\n\tparentInvocationId: string;\n\ttenantId: string;\n\tspaceId: string;\n\terror: string;\n\tcompensation: HostCompensationRecord[];\n}\n\nexport interface HostCompensationRecord {\n\tstepId: string;\n\tactionId: string;\n\terror?: string;\n}\n\n/**\n * Durable saga parent lifecycle contract backed by a Platform Host store.\n *\n * Structurally compatible with {@link import(\"@fabricorg/platform-temporal\").SagaParentLifecycle}\n * so an instance can be passed directly to\n * {@link import(\"@fabricorg/platform-temporal\").createSagaParentActivities}.\n *\n * Every transition is durable: the parent invocation row is the authoritative\n * state, and lifecycle events are the audit trail. A worker that rolls over\n * mid-saga can create a fresh adapter pointing at the same store and observe\n * the persisted progress, approval park, cancellation, completion, or failure\n * without in-memory state.\n */\nexport interface HostSagaParentLifecycle {\n\trecordProgress(input: HostSagaParentProgressInput): Promise<void>;\n\tparkApproval(input: HostSagaParentApprovalInput): Promise<void>;\n\tcancel(input: HostSagaParentCancellationInput): Promise<void>;\n\tcomplete(input: HostSagaParentCompletionInput): Promise<void>;\n\tfail(input: HostSagaParentFailureInput): Promise<void>;\n}\n\nexport interface CreateDurableSagaParentLifecycleOptions<TDb> {\n\tstore: PlatformHostStore<TDb>;\n\t/** Optional clock for deterministic tests. */\n\tnow?: () => Date;\n}\n\n/**\n * Create a {@link HostSagaParentLifecycle} backed by a Platform Host store.\n *\n * The parent invocation must already exist in the store (created by\n * `submitAction` or `createActionInvocation`). Each method appends a typed\n * lifecycle event and transitions the parent invocation to the appropriate\n * status so a fresh worker can observe the persisted state after a rollover.\n */\nexport function createDurableSagaParentLifecycle<TDb>(\n\toptions: CreateDurableSagaParentLifecycleOptions<TDb>,\n): HostSagaParentLifecycle {\n\tconst store = options.store;\n\tconst now = options.now ?? (() => new Date());\n\tconst transactionWithEvents = (\n\t\tstore as PlatformHostStore<TDb> & Partial<AtomicMutationPlatformHostStore<TDb>>\n\t).transactionWithEvents?.bind(store);\n\tif (!transactionWithEvents) {\n\t\tthrow new Error(\n\t\t\t\"Durable saga parent lifecycle requires store.transactionWithEvents for atomic event and parent updates.\",\n\t\t);\n\t}\n\tconst runInTransaction = transactionWithEvents;\n\n\tasync function applyLifecycleTransition(\n\t\tinput: {\n\t\t\ttenantId: string;\n\t\t\tspaceId: string;\n\t\t\tparentInvocationId: string;\n\t\t\tlifecycleId?: string;\n\t\t},\n\t\tlifecycleId: string,\n\t\teventType: string,\n\t\tpayload: Record<string, unknown>,\n\t\tpatch?: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\">>,\n\t): Promise<void> {\n\t\tconst eventId = `sagapar_${digestParameters({\n\t\t\tparentInvocationId: input.parentInvocationId,\n\t\t\tlifecycleId,\n\t\t}).slice(0, 40)}`;\n\t\tawait runInTransaction(async (transaction) => {\n\t\t\tif (!transaction.getActionInvocationForUpdate) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Durable saga parent lifecycle requires transaction.getActionInvocationForUpdate for serialization.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!transaction.getEvent) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Durable saga parent lifecycle requires transaction.getEvent for identity-scoped evidence lookup.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst parent = await transaction.getActionInvocationForUpdate(\n\t\t\t\tinput.parentInvocationId,\n\t\t\t\tinput.tenantId,\n\t\t\t\tinput.spaceId,\n\t\t\t);\n\t\t\tif (!parent) {\n\t\t\t\tthrow new Error(`Saga parent invocation not found: ${input.parentInvocationId}`);\n\t\t\t}\n\t\t\tconst prior = await transaction.getEvent(eventId, input.tenantId, input.spaceId);\n\t\t\tif (prior) {\n\t\t\t\tif (prior.eventType !== eventType ||\n\t\t\t\t\tdigestParameters(prior.payload) !== digestParameters(payload)) {\n\t\t\t\t\tthrow new Error(`Saga lifecycle identity ${lifecycleId} has contradictory evidence.`);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (TERMINAL_PARENT_STATUSES.has(parent.status)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Saga parent invocation ${input.parentInvocationId} is already terminal (${parent.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst sequence = await transaction.nextEventSequence(input.tenantId, input.spaceId);\n\t\t\tconst timestamp = now();\n\t\t\tawait transaction.appendEvent({\n\t\t\t\tid: eventId,\n\t\t\t\ttenantId: input.tenantId,\n\t\t\t\tspaceId: input.spaceId,\n\t\t\t\teventType,\n\t\t\t\teventSchemaVersion: 1,\n\t\t\t\tsubjectType: \"ActionInvocation\",\n\t\t\t\tsubjectId: input.parentInvocationId,\n\t\t\t\tactorId: \"system\",\n\t\t\t\tactorType: \"system\",\n\t\t\t\tactionInvocationId: input.parentInvocationId,\n\t\t\t\tpayload,\n\t\t\t\tsequence,\n\t\t\t\toccurredAt: timestamp,\n\t\t\t\trecordedAt: timestamp,\n\t\t\t\tcorrelationId: input.parentInvocationId,\n\t\t\t\tcausationId: lifecycleId,\n\t\t\t});\n\t\t\tif (patch) {\n\t\t\t\tawait transaction.updateActionInvocation(\n\t\t\t\t\tinput.parentInvocationId,\n\t\t\t\t\tinput.tenantId,\n\t\t\t\t\tinput.spaceId,\n\t\t\t\t\tpatch,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn {\n\t\tasync recordProgress(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:progress:${input.progress.stepId}:${input.progress.index}`,\n\t\t\t\t\"SagaParentProgress\",\n\t\t\t\t{\n\t\t\t\t\tstepId: input.progress.stepId,\n\t\t\t\t\tindex: input.progress.index,\n\t\t\t\t\ttotal: input.progress.total,\n\t\t\t\t\tcompletedAt: input.progress.completedAt,\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\n\t\tasync parkApproval(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:approval:${input.approvalId}`,\n\t\t\t\t\"SagaParentApprovalParked\",\n\t\t\t\t{\n\t\t\t\t\tstepId: input.stepId,\n\t\t\t\t\tapprovalId: input.approvalId,\n\t\t\t\t\treason: input.reason,\n\t\t\t\t},\n\t\t\t\t{ status: \"waiting_for_approval\" },\n\t\t\t);\n\t\t},\n\n\t\tasync cancel(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:cancel`,\n\t\t\t\t\"SagaParentCancelled\",\n\t\t\t\t{ reason: input.reason, actorId: input.actorId },\n\t\t\t\t{ status: \"failed\", error: `Saga cancelled: ${input.reason}` },\n\t\t\t);\n\t\t},\n\n\t\tasync complete(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:complete`,\n\t\t\t\t\"SagaParentCompleted\",\n\t\t\t\t{ result: input.result },\n\t\t\t\t{ status: \"completed\", result: input.result },\n\t\t\t);\n\t\t},\n\n\t\tasync fail(input) {\n\t\t\tawait applyLifecycleTransition(\n\t\t\t\tinput,\n\t\t\t\tinput.lifecycleId ?? `host:${input.parentInvocationId}:fail`,\n\t\t\t\t\"SagaParentFailed\",\n\t\t\t\t{ error: input.error, compensation: input.compensation },\n\t\t\t\t{ status: \"failed\", error: input.error },\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { ActionId, ActorType } from \"@fabricorg/platform\";\nimport type { GovernedActionHost, RecoverablePlatformHostStore } from \"./types\";\n\n// ── Tenant isolation conformance ────────────────────────────────────────────\n//\n// Every other seam ships an executable definition of correct. Isolation was\n// the guarantee every document asked for and every vertical tested itself.\n// These checks prove the kernel's part of it: a tenant's scope is a key on\n// every read and write, never a filter somebody remembered to add. What the\n// vertical's identity adapter derives into that scope is the identity port's\n// business, and its suite; what a projection authorizes is the projection\n// host's authorize hook, and the subject may lend one for the last check.\n\nexport interface TenantIsolationScope {\n\ttenantId: string;\n\tspaceId: string;\n\tactorId: string;\n\tactorType: ActorType;\n}\n\nexport interface TenantIsolationSubject<TDb = unknown> {\n\thost: GovernedActionHost;\n\tstore: RecoverablePlatformHostStore<TDb>;\n\t/** A governed action registered on the host, and parameters it accepts. */\n\tactionId: ActionId;\n\tparameters?: Record<string, unknown>;\n\t/** Two scopes in different tenants. */\n\tours: TenantIsolationScope;\n\ttheirs: TenantIsolationScope;\n\t/**\n\t * Optional: a governed read the subject exposes, scoped as the projection\n\t * host scopes it. Returns what a viewer in `scope` sees for the view. Every\n\t * row must carry the `tenantId` it belongs to, so the check can tell a row\n\t * of ours from a row of theirs that merely looks the same; two tenants may\n\t * legitimately hold equal-looking rows.\n\t */\n\tread?(scope: TenantIsolationScope): Promise<{ allowed: boolean; rows: readonly { tenantId: string }[] }>;\n\t/**\n\t * Optional: put the host and store back to a known state before a check.\n\t * The checks tolerate accumulated state, and each cleans up any row it\n\t * creates directly, so this exists for subjects whose store is shared.\n\t */\n\treset?(): Promise<void> | void;\n}\n\nexport interface TenantIsolationCheck {\n\tid:\n\t\t| \"fabric.tenancy.invocation-scoped-read.v1\"\n\t\t| \"fabric.tenancy.idempotency-key-scoped.v1\"\n\t\t| \"fabric.tenancy.events-scoped.v1\"\n\t\t| \"fabric.tenancy.worker-claim-scoped.v1\"\n\t\t| \"fabric.tenancy.completion-scoped.v1\"\n\t\t| \"fabric.tenancy.projection-scoped.v1\";\n\trun(subject: TenantIsolationSubject): Promise<string[]>;\n}\n\nexport interface TenantIsolationResult {\n\tpassed: boolean;\n\tchecks: Array<{ id: TenantIsolationCheck[\"id\"]; status: \"passed\" | \"failed\" | \"skipped\"; evidence: string[]; error?: string }>;\n}\n\nfunction fail(message: string): never {\n\tthrow new Error(message);\n}\n\nfunction submitInput(subject: TenantIsolationSubject, scope: TenantIsolationScope, idempotencyKey: string) {\n\treturn {\n\t\tactionId: subject.actionId,\n\t\tparameters: subject.parameters ?? {},\n\t\ttenantId: scope.tenantId,\n\t\tspaceId: scope.spaceId,\n\t\tactorId: scope.actorId,\n\t\tactorType: scope.actorType,\n\t\tidempotencyKey,\n\t};\n}\n\n/**\n * The suite any deployment of the host must pass before it claims isolation.\n *\n * Six checks: an invocation cannot be read, executed, or completed under\n * another tenant's scope; an idempotency key is a tenant's own, so the same\n * key in two tenants is two invocations; a tenant's event stream carries no\n * other tenant's events; a worker scoped to one tenant never claims another's\n * work; and, when the subject lends a read, a viewer in the other tenant sees\n * nothing of ours.\n */\nexport function tenantIsolationChecks(): readonly TenantIsolationCheck[] {\n\treturn [\n\t\t{\n\t\t\tid: \"fabric.tenancy.invocation-scoped-read.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tif (subject.ours.tenantId === subject.theirs.tenantId) fail(\"the two scopes must be in different tenants\");\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:read\"));\n\t\t\t\tconst crossRead = await subject.store.getActionInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\tif (crossRead !== undefined) fail(\"an invocation was readable under another tenant's scope\");\n\t\t\t\tconst shape = (record: { status?: unknown; result?: unknown; error?: unknown; attemptCount?: unknown; updatedAt?: unknown } | undefined) =>\n\t\t\t\t\tJSON.stringify({ status: record?.status, result: record?.result, error: record?.error, attemptCount: record?.attemptCount, updatedAt: record?.updatedAt });\n\t\t\t\tconst before = await subject.store.getActionInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (!before) fail(\"our own invocation was not readable under our scope, so the check proves nothing\");\n\t\t\t\t// Snapshotted now: a store may hand back its live record.\n\t\t\t\tconst untouched = shape(before);\n\t\t\t\tlet crossExecute: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tcrossExecute = await subject.host.executeInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\t} catch {\n\t\t\t\t\tcrossExecute = undefined;\n\t\t\t\t}\n\t\t\t\tif (crossExecute !== undefined) fail(\"an invocation was executable under another tenant's scope\");\n\t\t\t\t// Inert means untouched, not merely that nothing came back: a host\n\t\t\t\t// that read and wrote cross-tenant and then threw would otherwise pass.\n\t\t\t\tconst after = await subject.store.getActionInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (untouched !== shape(after)) fail(\"an execution attempted under another tenant's scope changed our invocation\");\n\t\t\t\treturn [\"invocation readable under our scope, invisible and untouched under the other tenant's\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.idempotency-key-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:shared-key\"));\n\t\t\t\tconst again = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:shared-key\"));\n\t\t\t\tif (ours.actionInvocationId !== again.actionInvocationId) fail(\"the same idempotency key in one tenant produced two invocations, so the key is not doing anything and the check proves nothing\");\n\t\t\t\tconst theirs = await subject.host.submitAction(submitInput(subject, subject.theirs, \"iso:shared-key\"));\n\t\t\t\tif (ours.actionInvocationId === theirs.actionInvocationId) fail(\"the same idempotency key in two tenants resolved to one invocation\");\n\t\t\t\treturn [\"one idempotency key: one invocation within a tenant, two across tenants\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.events-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:events\"));\n\t\t\t\tconst theirEvents = await subject.store.listEvents(subject.theirs.tenantId, subject.theirs.spaceId);\n\t\t\t\tconst leaked = theirEvents.filter((event) => event.tenantId === subject.ours.tenantId || event.actionInvocationId === ours.actionInvocationId);\n\t\t\t\tif (leaked.length > 0) fail(`${leaked.length} of our events appeared in the other tenant's stream`);\n\t\t\t\tconst ourEvents = await subject.store.listEvents(subject.ours.tenantId, subject.ours.spaceId);\n\t\t\t\tif (!ourEvents.some((event) => event.actionInvocationId === ours.actionInvocationId)) fail(\"our own stream does not carry the event we just caused, so the check proves nothing\");\n\t\t\t\tif (ourEvents.some((event) => event.tenantId !== subject.ours.tenantId)) fail(\"another tenant's event appeared in our stream\");\n\t\t\t\treturn [\"event streams carry their own tenant's events and only those\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.worker-claim-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\t// A pending row in a space of our own that nothing else uses, so a\n\t\t\t\t// backlog cannot push it past the claim limit, and a claim scoped to\n\t\t\t\t// it cannot sweep up real work. The row is retired afterwards so a\n\t\t\t\t// live worker never runs it.\n\t\t\t\tconst probeSpace = `iso-probe-${Date.now()}`;\n\t\t\t\tconst created = await subject.store.createActionInvocation({\n\t\t\t\t\tid: `iso_pending_${Date.now()}`,\n\t\t\t\t\ttenantId: subject.ours.tenantId,\n\t\t\t\t\tspaceId: probeSpace,\n\t\t\t\t\tactionId: subject.actionId,\n\t\t\t\t\tactionVersion: 1,\n\t\t\t\t\tactorId: subject.ours.actorId,\n\t\t\t\t\tactorType: subject.ours.actorType,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tparameters: subject.parameters ?? {},\n\t\t\t\t\tresult: {},\n\t\t\t\t\tcorrelationId: `iso-corr-${Date.now()}`,\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tconst theirs = await subject.store.claimActionInvocations({\n\t\t\t\t\t\tworkerId: \"iso-worker\", leaseDurationMs: 1_000, limit: 1_000,\n\t\t\t\t\t\ttenantId: subject.theirs.tenantId, spaceId: probeSpace,\n\t\t\t\t\t});\n\t\t\t\t\tif (theirs.some((row) => row.id === created.id)) fail(\"a worker scoped to another tenant claimed our pending invocation\");\n\t\t\t\t\tconst ours = await subject.store.claimActionInvocations({\n\t\t\t\t\t\tworkerId: \"iso-worker\", leaseDurationMs: 1_000, limit: 1_000,\n\t\t\t\t\t\ttenantId: subject.ours.tenantId, spaceId: probeSpace,\n\t\t\t\t\t});\n\t\t\t\t\tif (!ours.some((row) => row.id === created.id)) fail(\"a worker scoped to our own tenant did not claim our pending invocation, so the check proves nothing\");\n\t\t\t\t} finally {\n\t\t\t\t\tawait subject.store.updateActionInvocation(created.id, subject.ours.tenantId, probeSpace, {\n\t\t\t\t\t\tstatus: \"failed\", error: \"tenant isolation probe; never executed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [\"tenant-scoped claim takes our work and leaves other tenants' alone\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.completion-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tconst ours = await subject.host.submitAction(submitInput(subject, subject.ours, \"iso:complete\"));\n\t\t\t\tlet outcome: string;\n\t\t\t\ttry {\n\t\t\t\t\tawait subject.host.completeExternalInvocation(ours.actionInvocationId, subject.theirs.tenantId, subject.theirs.spaceId, {\n\t\t\t\t\t\texternalReference: \"iso-ref\", outcome: \"completed\", observedAt: new Date().toISOString(),\n\t\t\t\t\t});\n\t\t\t\t\toutcome = \"accepted\";\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst refusal = (error as { refusal?: string }).refusal;\n\t\t\t\t\toutcome = refusal ?? \"threw\";\n\t\t\t\t}\n\t\t\t\tif (outcome !== \"not_found\") fail(`a completion under another tenant's scope was ${outcome}; it must be refused as not_found`);\n\t\t\t\t// And under our own scope the invocation is found, whatever else it says.\n\t\t\t\tlet mine: string;\n\t\t\t\ttry {\n\t\t\t\t\tawait subject.host.completeExternalInvocation(ours.actionInvocationId, subject.ours.tenantId, subject.ours.spaceId, {\n\t\t\t\t\t\texternalReference: \"iso-ref\", outcome: \"completed\", observedAt: new Date().toISOString(),\n\t\t\t\t\t});\n\t\t\t\t\tmine = \"accepted\";\n\t\t\t\t} catch (error) {\n\t\t\t\t\tmine = (error as { refusal?: string }).refusal ?? \"threw\";\n\t\t\t\t}\n\t\t\t\tif (mine === \"not_found\") fail(\"a completion under our own scope was refused as not_found, so the check proves nothing\");\n\t\t\t\treturn [\"completion under the other tenant's scope refused as not_found; found under ours\"];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"fabric.tenancy.projection-scoped.v1\",\n\t\t\tasync run(subject) {\n\t\t\t\tif (!subject.read) return [\"skipped: subject lends no read\"];\n\t\t\t\tawait subject.reset?.();\n\t\t\t\tawait subject.host.submitAction(submitInput(subject, subject.ours, \"iso:projection\"));\n\t\t\t\tconst ours = await subject.read(subject.ours);\n\t\t\t\tconst theirs = await subject.read(subject.theirs);\n\t\t\t\tif (!ours.allowed) fail(\"our own viewer was denied the read\");\n\t\t\t\tif (ours.rows.length === 0) fail(\"our own viewer saw nothing, so the check proves nothing\");\n\t\t\t\tif (ours.rows.some((row) => row?.tenantId !== subject.ours.tenantId)) fail(\"our own viewer saw rows that are not ours, or rows carrying no tenant\");\n\t\t\t\t// The other tenant may have rows of its own; what it must not have\n\t\t\t\t// is any of ours. Rows say whose they are, so two tenants holding\n\t\t\t\t// equal-looking rows is not a leak.\n\t\t\t\tconst leaked = theirs.allowed ? theirs.rows.filter((row) => row?.tenantId === subject.ours.tenantId) : [];\n\t\t\t\tif (leaked.length > 0) fail(`a viewer in the other tenant saw ${leaked.length} of our rows`);\n\t\t\t\treturn [theirs.allowed ? \"other tenant's viewer sees none of our rows\" : \"other tenant's viewer is denied\"];\n\t\t\t},\n\t\t},\n\t];\n}\n\n/** Run every check, returning each result rather than throwing on the first. */\nexport async function runTenantIsolationChecks(subject: TenantIsolationSubject): Promise<TenantIsolationResult> {\n\tconst checks: TenantIsolationResult[\"checks\"] = [];\n\tfor (const check of tenantIsolationChecks()) {\n\t\ttry {\n\t\t\tconst evidence = await check.run(subject);\n\t\t\tchecks.push({ id: check.id, status: evidence[0]?.startsWith(\"skipped\") ? \"skipped\" : \"passed\", evidence });\n\t\t} catch (error) {\n\t\t\tchecks.push({ id: check.id, status: \"failed\", evidence: [], error: error instanceof Error ? error.message : String(error) });\n\t\t}\n\t}\n\treturn { passed: checks.every((check) => check.status !== \"failed\"), checks };\n}\n"]}
|