@fabricorg/platform-host 0.4.3 → 0.5.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/host.ts","../src/memory-store.ts","../src/postgres-store.ts","../src/worker.ts"],"names":["AdapterRegistry","resolveAction","createFabricId","evaluatePolicyDefinitions","aggregatePolicyOutcomes","validateTransition","result","executeWithAdapterRetry","resolveStateMachine","record"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n\tAdapterRegistry,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tresolveAction,\n\tresolveStateMachine,\n\tvalidateTransition,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionDefinition,\n\tActionId,\n\tActionStatus,\n\tAssetEventEnvelope,\n\tRuntimePolicyDefinition,\n} from \"@fabricorg/platform\";\nimport type {\n\tActionApprovalDecision,\n\tActionAuthorizationInput,\n\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tApprovalPlatformHostStore,\n\tExecuteActionResult,\n\tExecuteInvocationOptions,\n\tGovernedActionHost,\n\tPendingAssetEvent,\n\tPlatformHostOptions,\n\tSubmitActionInput,\n\tSubmitActionResult,\n} from \"./types\";\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\nexport function createGovernedActionHost<TDb>(\n\toptions: PlatformHostOptions<TDb>,\n): GovernedActionHost {\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 actionResolver = options.resolveAction ?? resolveAction;\n\tconst eventResultFields = options.eventResultFields ?? [\"_events\"];\n\n\tasync function submitAction(input: SubmitActionInput): Promise<SubmitActionResult> {\n\t\tconst action = actionResolver(input.actionId);\n\t\tif (!action) throw new Error(`Unknown action: ${input.actionId}`);\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\tconst correlationId = input.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 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\tcorrelationId,\n\t\t\t...(input.causationId ? { causationId: input.causationId } : {}),\n\t\t\t...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n\t\t});\n\t\tconst durableWorkflowId = `action-invocation-${durableInvocation.id}`;\n\t\tif (durableInvocation.id !== actionInvocationId && isTerminal(durableInvocation.status)) {\n\t\t\treturn {\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};\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 {\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};\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 { ...executed, 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): 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\tlet invocation: ActionInvocationRecord = loadedInvocation;\n\t\tif (isTerminal(invocation.status) || invocation.status === \"waiting_for_approval\") {\n\t\t\treturn actionResult(invocation);\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 (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 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\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\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(binding.entityType))\n\t\t\t\t: initialState(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 = validateTransition(\n\t\t\t\t\tbinding.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 handlerResult = await options.store.transaction((db) =>\n\t\t\t\taction.handler\n\t\t\t\t\t? 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\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: Promise.resolve({ success: true, data: {} }),\n\t\t\t);\n\t\t\tif (!handlerResult.success) {\n\t\t\t\treturn fail(invocation, \"failed\", handlerResult.error ?? \"Action handler failed\");\n\t\t\t}\n\t\t\tdata = handlerResult.data ?? {};\n\t\t\tdomainEvents = extractEvents(data);\n\t\t\tconst undeclaredEvent = domainEvents.find(\n\t\t\t\t(event) => !action.emitsEvents.includes(event.eventType),\n\t\t\t);\n\t\t\tif (undeclaredEvent) {\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`${action.actionId} emitted undeclared event type ${undeclaredEvent.eventType}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (action.eventPhase !== \"after_adapters\") {\n\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\n\t\t\t\t}\n\t\t\t}\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\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\tif (action.eventPhase === \"after_adapters\") {\n\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\n\t\t\t}\n\t\t}\n\n\t\tconst result = withoutPrivateHostFields(data, eventResultFields);\n\t\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\tstatus: \"completed\",\n\t\t\tresult,\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\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 actionResult(invocation);\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 actionResult(transitioned);\n\t\t}\n\t\tif (!decision.approved) return actionResult(transitioned);\n\t\treturn executeInvocation(actionInvocationId, tenantId, spaceId, { leaseOwner });\n\t}\n\n\tasync function appendEvent(\n\t\tinvocation: {\n\t\t\tid: string;\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},\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion = 1,\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 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};\n\t\tawait options.store.appendEvent(envelope);\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 };\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};\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 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(entityType: string): string {\n\tconst machine = resolveStateMachine(entityType);\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\", \"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","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\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tRecoverablePlatformHostStore,\n} from \"./types\";\n\nexport class MemoryPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb> {\n\treadonly invocations: ActionInvocationRecord[] = [];\n\treadonly policyEvaluations: PolicyEvaluationRecord[] = [];\n\treadonly adapterInvocations: AdapterInvocationRecord[] = [];\n\treadonly events: AssetEventEnvelope[] = [];\n\n\tconstructor(readonly db: TDb) {}\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\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\">>,\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 === \"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 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 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\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tRecoverablePlatformHostStore,\n} from \"./types\";\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\n/** Durable mutation-pipeline ledger for Databricks Lakebase or standard Postgres. */\nexport class PostgresPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb> {\n\tconstructor(\n\t\treadonly db: TDb,\n\t\tprivate readonly sql: PlatformHostSqlClient,\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, 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\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 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\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_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.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,\n\t\t\t\tUNIQUE (tenant_id, space_id, sequence)\n\t\t\t);\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`);\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 parameters,result,correlation_id,causation_id,idempotency_key,error,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,$15,$15)\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.error ?? 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\">>,\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 lease_owner=CASE WHEN $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','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','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);\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 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)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16)\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);\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\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.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 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};\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/host.ts","../src/memory-store.ts","../src/postgres-store.ts","../src/worker.ts"],"names":["AdapterRegistry","resolveAction","createFabricId","governanceStore","assertMutationGovernanceContext","evaluatePolicyDefinitions","aggregatePolicyOutcomes","validateTransition","result","executeWithAdapterRetry","resolveStateMachine","record"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n\tAdapterRegistry,\n\taggregatePolicyOutcomes,\n\tcreateFabricId,\n\tevaluatePolicyDefinitions,\n\texecuteWithAdapterRetry,\n\tresolveAction,\n\tresolveStateMachine,\n\tvalidateTransition,\n\tassertMutationGovernanceContext,\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\tActionInvocationRecord,\n\tAdapterInvocationRecord,\n\tApprovalPlatformHostStore,\n\tExecuteActionResult,\n\tExecuteInvocationOptions,\n\tGovernedActionHost,\n\tGovernancePlatformHostStore,\n\tPendingAssetEvent,\n\tPlatformHostOptions,\n\tSubmitActionInput,\n\tSubmitActionResult,\n} from \"./types\";\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\nexport function createGovernedActionHost<TDb>(\n\toptions: PlatformHostOptions<TDb>,\n): GovernedActionHost {\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 actionResolver = options.resolveAction ?? resolveAction;\n\tconst eventResultFields = options.eventResultFields ?? [\"_events\"];\n\n\tasync function submitAction(input: SubmitActionInput): Promise<SubmitActionResult> {\n\t\tconst action = actionResolver(input.actionId);\n\t\tif (!action) throw new Error(`Unknown action: ${input.actionId}`);\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\tconst correlationId = input.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 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\tcorrelationId,\n\t\t\t...(input.causationId ? { causationId: input.causationId } : {}),\n\t\t\t...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n\t\t});\n\t\tconst durableWorkflowId = `action-invocation-${durableInvocation.id}`;\n\t\tif (durableInvocation.id !== actionInvocationId && isTerminal(durableInvocation.status)) {\n\t\t\treturn {\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};\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 {\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};\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 { ...executed, 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): 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\tlet invocation: ActionInvocationRecord = loadedInvocation;\n\t\tif (isTerminal(invocation.status) || invocation.status === \"waiting_for_approval\") {\n\t\t\treturn actionResult(invocation);\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 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\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(binding.entityType))\n\t\t\t\t: initialState(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 = validateTransition(\n\t\t\t\t\tbinding.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 handlerResult = await options.store.transaction((db) =>\n\t\t\t\taction.handler\n\t\t\t\t\t? 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\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: Promise.resolve({ success: true, data: {} }),\n\t\t\t);\n\t\t\tif (!handlerResult.success) {\n\t\t\t\treturn fail(invocation, \"failed\", handlerResult.error ?? \"Action handler failed\");\n\t\t\t}\n\t\t\tdata = handlerResult.data ?? {};\n\t\t\tdomainEvents = extractEvents(data);\n\t\t\tconst undeclaredEvent = domainEvents.find(\n\t\t\t\t(event) => !action.emitsEvents.includes(event.eventType),\n\t\t\t);\n\t\t\tif (undeclaredEvent) {\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`${action.actionId} emitted undeclared event type ${undeclaredEvent.eventType}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (action.eventPhase !== \"after_adapters\") {\n\t\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\n\t\t\t\t}\n\t\t\t}\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\tif (action.eventPhase === \"after_adapters\") {\n\t\t\tfor (const [index, event] of domainEvents.entries()) {\n\t\t\t\tawait appendEvent(invocation, event, `domain:${index}`, action.version);\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\tawait options.store.updateActionInvocation(actionInvocationId, tenantId, spaceId, {\n\t\t\tstatus: \"completed\",\n\t\t\tresult,\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\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 actionResult(invocation);\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 actionResult(transitioned);\n\t\t}\n\t\tif (!decision.approved) return actionResult(transitioned);\n\t\treturn executeInvocation(actionInvocationId, tenantId, spaceId, { leaseOwner });\n\t}\n\n\tasync function recordExecutionAttestation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\tattestation: ExecutionAttestation,\n\t\tadapterInvocationId?: string,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"Execution attestations require a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tconst id = lifecycleId(\"att\", actionInvocationId, adapterInvocationId ?? `${attestation.provider}:${attestation.operation}:${attestation.externalOperationId ?? \"external\"}`);\n\t\tawait governanceStore.appendExecutionAttestation({\n\t\t\t...attestation, id, actionInvocationId, tenantId, spaceId,\n\t\t\t...(adapterInvocationId ? { adapterInvocationId } : {}), recordedAt: now(),\n\t\t});\n\t\tfor (const obligationId of attestation.satisfiesObligations ?? []) {\n\t\t\tawait governanceStore.updatePolicyObligation(actionInvocationId, obligationId, \"satisfied\", attestation.evidenceReferences);\n\t\t}\n\t}\n\n\tasync function recordExternalReconciliation(\n\t\tactionInvocationId: string,\n\t\ttenantId: string,\n\t\tspaceId: string,\n\t\treconciliation: ExternalReconciliation,\n\t): Promise<void> {\n\t\tconst governanceStore = asGovernanceStore(options.store);\n\t\tif (!governanceStore) throw new Error(\"External reconciliation requires a governance-capable store.\");\n\t\tconst invocation = await options.store.getActionInvocation(actionInvocationId, tenantId, spaceId);\n\t\tif (!invocation) throw new Error(`ActionInvocation not found: ${actionInvocationId}`);\n\t\tawait governanceStore.appendExternalReconciliation({\n\t\t\t...reconciliation,\n\t\t\tid: lifecycleId(\"rec\", actionInvocationId, `${reconciliation.provider}:${reconciliation.attempt}`),\n\t\t\tactionInvocationId, tenantId, spaceId,\n\t\t});\n\t}\n\n\tasync function appendEvent(\n\t\tinvocation: {\n\t\t\tid: string;\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},\n\t\tevent: PendingAssetEvent,\n\t\tdeduplicationKey: string,\n\t\tdefaultEventSchemaVersion = 1,\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 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};\n\t\tawait options.store.appendEvent(envelope);\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};\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 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(entityType: string): string {\n\tconst machine = resolveStateMachine(entityType);\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\", \"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","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} from \"./types\";\n\nexport class MemoryPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb> {\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\n\tconstructor(readonly db: TDb) {}\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\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\">>,\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 === \"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 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\tBeginApprovalDecisionInput,\n\tClaimActionInvocationsInput,\n\tCreateActionInvocationInput,\n\tHitlDecisionEvidence,\n\tGovernancePlatformHostStore,\n\tPolicyObligationRecord,\n\tExecutionAttestationRecord,\n\tExternalReconciliationRecord,\n\tListActionInvocationsInput,\n\tPolicyEvaluationRecord,\n\tRecoverablePlatformHostStore,\n} from \"./types\";\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\n/** Durable mutation-pipeline ledger for Databricks Lakebase or standard Postgres. */\nexport class PostgresPlatformHostStore<TDb>\n\timplements RecoverablePlatformHostStore<TDb>, ApprovalPlatformHostStore<TDb>, GovernancePlatformHostStore<TDb> {\n\tconstructor(\n\t\treadonly db: TDb,\n\t\tprivate readonly sql: PlatformHostSqlClient,\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, 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,\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 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\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_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,\n\t\t\t\tUNIQUE (tenant_id, space_id, sequence)\n\t\t\t);\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`);\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 parameters,result,correlation_id,causation_id,idempotency_key,error,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,$15,$15)\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.error ?? 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\">>,\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 lease_owner=CASE WHEN $4 IN ('waiting_for_approval','completed','failed','blocked_by_policy','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','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);\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)\n\t\t\t\t VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,$13,$14,$15,$16)\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);\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\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.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};\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"]}