@fabricorg/platform-host 7.1.1 → 7.1.2
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 +6 -0
- package/dist/index.cjs +237 -210
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +237 -210
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/command-identity.ts","../src/observability.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"],"names":["createHash","assertAssemblyRuntimeCompatible","AdapterRegistry","createFabricId","FABRIC_GOVERNANCE_CONTRACT_VERSION","assertGovernanceRuntimeEvidence","governanceStore","assertMutationGovernanceContext","evaluatePolicyDefinitions","aggregatePolicyOutcomes","evaluateStateMachineTransition","result","executeWithAdapterRetry","assertAdapterOutcomeConsistency","deadlineMs","read","patch","record","db","sql","lifecycleId"],"mappings":"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","file":"index.cjs","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 {\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 { createHash } from \"node:crypto\";\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\tAtomicMutationPlatformHostStore,\n\tExecuteActionResult,\n\tExecuteInvocationOptions,\n\tGovernedActionHost,\n\tGovernancePlatformHostStore,\n\tPendingAssetEvent,\n\tOutboxPlatformHostStore,\n\tPlatformHostOptions,\n\tPlatformHostMutationTransaction,\n\tSubmitActionInput,\n\tSubmitActionResult,\n\tIdempotencyConflict,\n\tRecoverablePlatformHostStore,\n\tActionInvocationPatch,\n\tExternalCompletion,\n\tPendingExternalCompletion,\n\tReconcileOverdueCompletionsInput,\n\tRecordedExternalCompletion,\n} from \"./types\";\nimport { ExternalCompletionError, IdempotencyConflictError, PLATFORM_HOST_CONTRACT_VERSION } from \"./types\";\nimport { canonicalJson, digestParameters, normalizeProvenance, PARAMETER_DIGEST_ALGORITHM } from \"./command-identity\";\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 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 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\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(options.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 options.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 options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\treturn settleExternalCompletion(read, actionInvocationId, completion, {\n\t\t\tupdate: (patch) => options.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\", options.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 options.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\", options.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 options.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\", options.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(options.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 = options.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(options.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\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\treturn { submitAction, executeInvocation, resumeApprovedInvocation, recordExecutionAttestation, recordExternalReconciliation, completeExternalInvocation, reconcileOverdueCompletions };\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 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\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 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\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 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\nfunction 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\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction 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\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"]}
|
|
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"],"names":["createHash","actionResult","read","patch","assertAssemblyRuntimeCompatible","AdapterRegistry","createFabricId","FABRIC_GOVERNANCE_CONTRACT_VERSION","assertGovernanceRuntimeEvidence","governanceStore","assertMutationGovernanceContext","evaluatePolicyDefinitions","aggregatePolicyOutcomes","evaluateStateMachineTransition","result","executeWithAdapterRetry","assertAdapterOutcomeConsistency","deadlineMs","record","db","sql","lifecycleId"],"mappings":"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","file":"index.cjs","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"]}
|