@fabricorg/platform-host 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +84 -0
- package/MIGRATION-6-PRODUCTION.md +59 -0
- package/README.md +89 -11
- package/dist/index.cjs +1154 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +377 -13
- package/dist/index.d.ts +377 -13
- package/dist/index.js +1150 -100
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/command-identity.ts","../src/host.ts","../src/outbox.ts","../src/memory-store.ts","../src/postgres-store.ts","../src/worker.ts"],"names":["createHash","AdapterRegistry","createFabricId","FABRIC_GOVERNANCE_CONTRACT_VERSION","assertGovernanceRuntimeEvidence","governanceStore","assertMutationGovernanceContext","evaluatePolicyDefinitions","aggregatePolicyOutcomes","validateStateMachineTransition","result","executeWithAdapterRetry","record","db","sql"],"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\tMutationFootprint,\n\tExecutionPrincipal,\n\tMutationGovernanceResolver,\n\tGovernanceRuntimeEvidence,\n\tRuntimePolicyDefinition,\n\tModuleRegistry,\n} from \"@fabricorg/platform\";\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 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/** Opaque, non-secret reference used to revalidate delegated execution authority. */\n\tauthorizationBindingId?: string;\n\tattemptCount: number;\n\tleaseOwner?: string;\n\tleaseExpiresAt?: Date;\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 type AdapterInvocationStatus = \"running\" | \"succeeded\" | \"failed\";\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\"\n\t> {}\n\nexport interface PlatformHostStore<TDb> {\n\treadonly db: TDb;\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\">>,\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\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\tupdateActionInvocation(\n\t\tid: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tpatch: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\">>,\n\t): Promise<void>;\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\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): Promise<void>;\n\tmarkOutboxFailed(input: { id: string; workerId: string; error: string; availableAt: Date; deadLetter: boolean }): Promise<void>;\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\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/** 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\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\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 without re-dispatch. */\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\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\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}\n\nexport interface PlatformActionWorkerOptions<TDb> {\n\thost: GovernedActionHost;\n\tstore: RecoverablePlatformHostStore<TDb>;\n\tworkerId: string;\n\tbatchSize?: number;\n\tleaseDurationMs?: number;\n\tpollIntervalMs?: number;\n\ttenantId?: string;\n\tspaceId?: string;\n\tsignal?: AbortSignal;\n\tonError?: (error: unknown, invocation?: ActionInvocationRecord) => void;\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/** 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/** 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}\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}\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 {\n\tAdapterRegistry,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tvalidateStateMachineTransition,\n\tassertMutationGovernanceContext,\n\tassertGovernanceRuntimeEvidence,\n\tFABRIC_GOVERNANCE_CONTRACT_VERSION,\n} from \"@fabricorg/platform\";\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\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} from \"./types\";\nimport { IdempotencyConflictError, PLATFORM_HOST_CONTRACT_VERSION } from \"./types\";\nimport { digestParameters, normalizeProvenance, PARAMETER_DIGEST_ALGORITHM } from \"./command-identity\";\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.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 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};\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\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 replay returns the original invocation; it must report what the original did.\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}, 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\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\tconst message = errorMessage(error);\n\t\t\t\tawait options.store.updateActionInvocation(\n\t\t\t\t\tdurableInvocation.id,\n\t\t\t\t\tinput.tenantId,\n\t\t\t\t\tinput.spaceId,\n\t\t\t\t\t{ status: \"failed\", error: message },\n\t\t\t\t);\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 (\n\t\t\tinvocation.status === \"running\" &&\n\t\t\tinvocation.leaseOwner &&\n\t\t\texecutionOptions.leaseOwner !== invocation.leaseOwner\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...actionResult(invocation),\n\t\t\t\terror: `Invocation is leased by ${invocation.leaseOwner}`,\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 (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\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 options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\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 options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { 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 options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { 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 options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, { 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\tconst binding = action.stateMachine;\n\t\tif (binding) {\n\t\t\tconst entityId = binding.getEntityId(parsed.data);\n\t\t\tconst currentState = entityId\n\t\t\t\t? ((await options.store.getEntityState(\n\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\tbinding.entityType,\n\t\t\t\t\t\tentityId,\n\t\t\t\t\t)) ?? initialState(stateMachineResolver(binding.entityType)))\n\t\t\t\t: initialState(stateMachineResolver(binding.entityType));\n\t\t\tconst targetState =\n\t\t\t\ttypeof binding.targetState === \"function\"\n\t\t\t\t\t? binding.targetState(parsed.data)\n\t\t\t\t\t: binding.targetState;\n\t\t\tif (targetState !== \"\") {\n\t\t\t\tconst transition = validateStateMachineTransition(\n\t\t\t\t\tstateMachineResolver(binding.entityType), binding.entityType,\n\t\t\t\t\tcurrentState,\n\t\t\t\t\ttargetState,\n\t\t\t\t\taction.actionId,\n\t\t\t\t);\n\t\t\t\tconst replayingAppliedTransition = action.idempotent && currentState === targetState;\n\t\t\t\tif (!transition.valid && !replayingAppliedTransition) {\n\t\t\t\t\treturn fail(invocation, \"failed\", transition.error ?? \"Invalid state transition\");\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 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\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\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\ttry {\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});\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});\n\t\t\t\tif (!result.success) {\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\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}\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\treturn fail(invocation, \"failed\", `Unsatisfied policy obligations: ${unsatisfied.map((item) => item.id).join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data, eventResultFields);\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\tawait transaction.updateActionInvocation(\n\t\t\t\t\t\tactionInvocationId,\n\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\tspaceId,\n\t\t\t\t\t\t{ status: \"completed\", result },\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 options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\tresult,\n\t\t\t\t});\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: \"completed\",\n\t\t\tresult,\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) return withConsistency(actionResult(transitioned), transitioned.actionId);\n\t\treturn executeInvocation(\n\t\t\tactionInvocationId,\n\t\t\ttenantId,\n\t\t\tspaceId,\n\t\t\t{ leaseOwner },\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\", \"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 options.store.updateActionInvocation(\n\t\t\tinvocation.id,\n\t\t\tinvocation.tenantId,\n\t\t\tinvocation.spaceId,\n\t\t\t{ status, error },\n\t\t);\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\treturn { submitAction, executeInvocation, resumeApprovedInvocation, recordExecutionAttestation, recordExternalReconciliation };\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};\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 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\";\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): Promise<void>;\n}\n\nexport interface OutboxRelayOptions<TDb> {\n\tstore: OutboxPlatformHostStore<TDb>;\n\tpublisher: EnterpriseEventPublisher;\n\tworkerId: string;\n\tleaseDurationMs?: number;\n\tbatchSize?: number;\n\tmaxAttempts?: number;\n\tretryDelayMs?: (attempt: number) => number;\n\tnow?: () => Date;\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 records = await options.store.claimOutbox({\n\t\tworkerId: options.workerId,\n\t\tleaseDurationMs: options.leaseDurationMs ?? 30_000,\n\t\tlimit: options.batchSize ?? 100,\n\t\tnow: now(),\n\t});\n\tconst result: OutboxRelayResult = { claimed: records.length, published: 0, failed: 0, deadLettered: 0 };\n\tfor (const record of records) {\n\t\ttry {\n\t\t\tawait options.publisher.publish(record.event);\n\t\t\ttry {\n\t\t\t\tawait options.store.markOutboxPublished(record.id, options.workerId, now());\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\tcontinue;\n\t\t\t}\n\t\t\tresult.published += 1;\n\t\t} catch {\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\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}\n\t}\n\treturn result;\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","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\";\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\">> }> = [];\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\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\tupdateActionInvocation: async (id, tenantId, spaceId, patch) => { pendingUpdates.push({ id, tenantId, spaceId, patch }); },\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, 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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\">>,\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 (\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.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.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): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(id, workerId);\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; error: string; availableAt: Date; deadLetter: boolean }): Promise<void> {\n\t\tconst record = this.requireLeasedOutbox(input.id, input.workerId);\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 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): OutboxRecord {\n\t\tconst record = this.outbox.find((candidate) => candidate.id === id);\n\t\tif (!record || record.leaseOwner !== workerId) throw new Error(`Outbox record ${id} is not leased by ${workerId}.`);\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)\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 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\t(!record.leaseExpiresAt || record.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.attemptCount += 1;\n\t\t\trecord.updatedAt = current;\n\t\t}\n\t\treturn eligible;\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 type { AssetEventEnvelope } from \"@fabricorg/platform\";\nimport type {\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\";\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\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\tupdateActionInvocation: (id, tenantId, spaceId, patch) =>\n\t\t\t\t\t\t\tscoped.updateActionInvocation(id, tenantId, spaceId, patch),\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 this.sql.query(`\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\tauthorization_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 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`);\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\">>,\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 lease_owner=CASE WHEN $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 $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);\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 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, 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): 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 WHERE id=$1 AND lease_owner=$2 RETURNING id`,\n\t\t\t[id, workerId, publishedAt],\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; 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 WHERE id=$1 AND lease_owner=$2 RETURNING id`,\n\t\t\t[input.id, input.workerId, input.deadLetter ? \"dead_letter\" : \"pending\", input.error, input.availableAt],\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 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\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 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 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\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 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 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\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 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.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\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\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\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\tPlatformActionDispatcher,\n\tPlatformActionWorkerCycleResult,\n\tPlatformActionWorkerOptions,\n} from \"./types\";\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 claimed = await options.store.claimActionInvocations({\n\t\tworkerId: options.workerId,\n\t\tlimit: options.batchSize ?? DEFAULT_BATCH_SIZE,\n\t\tleaseDurationMs: options.leaseDurationMs ?? DEFAULT_LEASE_DURATION_MS,\n\t\t...(options.tenantId ? { tenantId: options.tenantId } : {}),\n\t\t...(options.spaceId ? { spaceId: options.spaceId } : {}),\n\t});\n\tlet completed = 0;\n\tlet failed = 0;\n\tlet waitingForApproval = 0;\n\tfor (const invocation of claimed) {\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 },\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}\n\t}\n\treturn {\n\t\tclaimed: claimed.length,\n\t\tcompleted,\n\t\tfailed,\n\t\t...(waitingForApproval > 0 ? { waitingForApproval } : {}),\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"]}
|
|
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","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\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 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/** 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 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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">>,\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">>,\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\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\nexport type ActionInvocationPatch = Partial<\n\tPick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">\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/** 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/** 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}\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}\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 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} from \"./types\";\nimport { IdempotencyConflictError, PLATFORM_HOST_CONTRACT_VERSION } from \"./types\";\nimport { 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}, 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 (\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\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\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\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\treturn fail(invocation, \"failed\", `Unsatisfied policy obligations: ${unsatisfied.map((item) => item.id).join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data, eventResultFields);\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: { status: \"completed\", result },\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\t{ status: \"completed\", result },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\temitInvocationStatusTelemetry(\n\t\t\t\t\tinvocation,\n\t\t\t\t\t\"completed\",\n\t\t\t\t\toptions.telemetry,\n\t\t\t\t\tnow(),\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, {\n\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\tresult,\n\t\t\t\t});\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: \"completed\",\n\t\t\tresult,\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\", \"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 };\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};\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">> }> = [];\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">>,\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 (\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)\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\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}\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: Partial<Pick<ActionInvocationRecord, \"status\" | \"result\" | \"error\" | \"authorizationReconciliation\" | \"adapterReconciliation\">>,\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 lease_owner=CASE WHEN $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 $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);\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\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 lease_owner=CASE WHEN $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 $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);\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 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.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\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"]}
|