@sixb/core 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.d.ts +2 -2
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +17 -18
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +10 -2
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +45 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/worker.js +4 -4
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/context-compaction.d.ts +40 -0
- package/dist/agents/context-compaction.d.ts.map +1 -0
- package/dist/agents/ids.d.ts +2 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -5
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +42 -37
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/streams.d.ts +17 -1
- package/dist/agents/streams.d.ts.map +1 -1
- package/dist/agents/streams.js +4 -2
- package/dist/agents/streams.js.map +1 -1
- package/dist/agents/types.d.ts +11 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.js +7 -3
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/index.js +6 -2
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/index.js +30 -31
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-d6y2wsfg.js → chunk-1q02e95s.js} +12 -7
- package/dist/{chunk-d6y2wsfg.js.map → chunk-1q02e95s.js.map} +4 -3
- package/dist/{chunk-c6cfqydk.js → chunk-4h947jd8.js} +1 -1
- package/dist/{chunk-gqdd7508.js → chunk-4rh2m6zg.js} +1 -1
- package/dist/{chunk-f1cyvnrk.js → chunk-6d5xdj1q.js} +259 -9
- package/dist/chunk-6d5xdj1q.js.map +14 -0
- package/dist/{chunk-fmx1sz2h.js → chunk-72q2y8hn.js} +3 -3
- package/dist/{chunk-fmx1sz2h.js.map → chunk-72q2y8hn.js.map} +3 -3
- package/dist/{chunk-ttba8x6z.js → chunk-78c6xvyr.js} +68 -3
- package/dist/chunk-78c6xvyr.js.map +15 -0
- package/dist/{chunk-wb4051cx.js → chunk-819wnjz8.js} +11 -5
- package/dist/chunk-819wnjz8.js.map +12 -0
- package/dist/{chunk-177ed2mp.js → chunk-84h6qhmp.js} +233 -97
- package/dist/{chunk-177ed2mp.js.map → chunk-84h6qhmp.js.map} +9 -9
- package/dist/{chunk-pxtrxm3p.js → chunk-a09jx26t.js} +1 -1
- package/dist/{chunk-bv41fmjn.js → chunk-am6eczah.js} +59 -22
- package/dist/{chunk-bv41fmjn.js.map → chunk-am6eczah.js.map} +8 -7
- package/dist/{chunk-zpw39qhj.js → chunk-dm72y8wt.js} +25 -2
- package/dist/chunk-dm72y8wt.js.map +10 -0
- package/dist/{chunk-kqxgf6kv.js → chunk-drjqm1aa.js} +16 -1
- package/dist/{chunk-kqxgf6kv.js.map → chunk-drjqm1aa.js.map} +3 -3
- package/dist/chunk-dysw7nsm.js.map +1 -1
- package/dist/{chunk-4p9rh7jj.js → chunk-ea73pzk7.js} +1 -1
- package/dist/{chunk-4aw0jwk0.js → chunk-f6erf2vv.js} +1 -1
- package/dist/{chunk-4z3n1dzt.js → chunk-f83ka50g.js} +131 -25
- package/dist/chunk-f83ka50g.js.map +23 -0
- package/dist/{chunk-c8bw2b6c.js → chunk-gadsm794.js} +2 -2
- package/dist/{chunk-1ywq4hzk.js → chunk-h6h91mfy.js} +8 -10
- package/dist/{chunk-1ywq4hzk.js.map → chunk-h6h91mfy.js.map} +2 -2
- package/dist/{chunk-n5x5y80a.js → chunk-nzw7sm3b.js} +2 -2
- package/dist/{chunk-63te770v.js → chunk-qewtks41.js} +8 -8
- package/dist/{chunk-63te770v.js.map → chunk-qewtks41.js.map} +2 -2
- package/dist/{chunk-261ag4t4.js → chunk-r0rry8dn.js} +3 -3
- package/dist/{chunk-88ppkr54.js → chunk-rte5sm3z.js} +26 -2
- package/dist/chunk-rte5sm3z.js.map +12 -0
- package/dist/chunk-t0jjkep3.js.map +1 -1
- package/dist/{chunk-ettb0cy4.js → chunk-tbv03sx2.js} +59 -29
- package/dist/{chunk-ettb0cy4.js.map → chunk-tbv03sx2.js.map} +5 -5
- package/dist/{chunk-d2adj15j.js → chunk-tkdscva6.js} +1 -1
- package/dist/{chunk-xmggaxg4.js → chunk-v0egge8b.js} +201 -38
- package/dist/{chunk-xmggaxg4.js.map → chunk-v0egge8b.js.map} +8 -6
- package/dist/{chunk-z8j83gzd.js → chunk-x2yw73hy.js} +1 -1
- package/dist/{chunk-qer6am8w.js → chunk-xdf9yswn.js} +1 -1
- package/dist/{chunk-3rsf30p4.js → chunk-z3ga9q5m.js} +18 -21
- package/dist/{chunk-3rsf30p4.js.map → chunk-z3ga9q5m.js.map} +4 -5
- package/dist/{chunk-km4rkj4t.js → chunk-zp2v2rv6.js} +3 -3
- package/dist/execution/agent.js +26 -27
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/primitive.js +26 -27
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +27 -28
- package/dist/execution/request.js.map +2 -2
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -55
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +2 -1
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/materializer/index.js +15 -16
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/index.d.ts +40 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +6 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +19 -20
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/endpoints.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +1 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/explain.d.ts +1 -0
- package/dist/objects/query/explain.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +3 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +30 -5
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +14 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/links.d.ts +25 -0
- package/dist/objects/query/links.d.ts.map +1 -0
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +1 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +14 -6
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts +10 -0
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +15 -16
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/builders.d.ts +33 -4
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/index.d.ts +1 -1
- package/dist/projections/index.d.ts.map +1 -1
- package/dist/projections/internal.js +15 -16
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts +1 -0
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/projections/types.d.ts +12 -9
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/projections/validation.d.ts +6 -5
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/query.d.ts +2 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/runtime/create.d.ts +3 -0
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -0
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +2 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +4 -0
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +9 -5
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +5 -0
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +1 -1
- package/dist/storage/ai-usage/in-memory.d.ts +2 -1
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/index.d.ts +1 -1
- package/dist/storage/ai-usage/index.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +6 -0
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +19 -14
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/in-memory.d.ts +6 -3
- package/dist/storage/objects/in-memory.d.ts.map +1 -1
- package/dist/storage/objects/index.d.ts +3 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +16 -0
- package/dist/storage/objects/keys.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +33 -6
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -5
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +15 -16
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/effective-storage-contract.d.ts +1 -1
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.js +455 -40
- package/dist/testing/index.js.map +7 -7
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +13 -14
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/index.js +27 -28
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/index.ts +10 -1
- package/src/actions/read-facade.ts +125 -3
- package/src/actions/types/context.ts +69 -2
- package/src/agents/builders.ts +3 -3
- package/src/agents/context-compaction.ts +261 -0
- package/src/agents/ids.ts +5 -0
- package/src/agents/index.ts +18 -9
- package/src/agents/streams.ts +56 -0
- package/src/agents/types.ts +12 -0
- package/src/agents/validation.ts +39 -5
- package/src/http/api-routes.ts +7 -7
- package/src/index.ts +19 -0
- package/src/lake-storage/types.ts +2 -1
- package/src/materializer/telemetry/append.ts +33 -16
- package/src/models/index.ts +71 -0
- package/src/objects/execution.ts +20 -0
- package/src/objects/link/endpoints.ts +2 -1
- package/src/objects/query/executor.ts +42 -11
- package/src/objects/query/explain.ts +11 -0
- package/src/objects/query/index.ts +6 -0
- package/src/objects/query/ir.ts +16 -0
- package/src/objects/query/links.ts +308 -0
- package/src/objects/query/normalize.ts +40 -1
- package/src/objects/query/planner.ts +5 -0
- package/src/objects/query/validate.ts +58 -2
- package/src/ontology/internal.ts +1 -1
- package/src/ontology/json-schema.ts +27 -5
- package/src/projections/builders.ts +220 -15
- package/src/projections/index.ts +1 -0
- package/src/projections/ownership.ts +5 -5
- package/src/projections/registry.ts +9 -3
- package/src/projections/revision.ts +31 -5
- package/src/projections/run-dispatch.ts +10 -1
- package/src/projections/types.ts +13 -9
- package/src/projections/validation.ts +61 -19
- package/src/query.ts +2 -0
- package/src/runtime/create.ts +4 -0
- package/src/runtime/definitions.ts +3 -0
- package/src/runtime/host.ts +2 -0
- package/src/runtime/resolve-definitions.ts +28 -0
- package/src/storage/agents/in-memory.ts +15 -0
- package/src/storage/agents/types.ts +5 -0
- package/src/storage/ai-usage/in-memory.ts +23 -0
- package/src/storage/ai-usage/index.ts +1 -0
- package/src/storage/ai-usage/types.ts +10 -0
- package/src/storage/index.ts +11 -0
- package/src/storage/objects/in-memory.ts +103 -16
- package/src/storage/objects/index.ts +9 -0
- package/src/storage/objects/keys.ts +36 -0
- package/src/storage/objects/types.ts +34 -6
- package/src/storage/ontology/provider-header-validation.ts +2 -2
- package/src/storage/timeseries/store.ts +6 -6
- package/src/testing/agent-storage-contract.ts +12 -0
- package/src/testing/ai-usage-storage-contract.ts +35 -0
- package/src/testing/effective-storage-contract.ts +194 -4
- package/src/testing/lake-storage-contract.ts +56 -0
- package/src/testing/object-query-contract.ts +208 -1
- package/dist/agents/prompt.d.ts +0 -21
- package/dist/agents/prompt.d.ts.map +0 -1
- package/dist/chunk-4z3n1dzt.js.map +0 -23
- package/dist/chunk-6wetht33.js +0 -89
- package/dist/chunk-6wetht33.js.map +0 -10
- package/dist/chunk-88ppkr54.js.map +0 -12
- package/dist/chunk-f1cyvnrk.js.map +0 -13
- package/dist/chunk-ttba8x6z.js.map +0 -15
- package/dist/chunk-wb4051cx.js.map +0 -12
- package/dist/chunk-zpw39qhj.js.map +0 -10
- package/src/agents/prompt.ts +0 -85
- /package/dist/{chunk-c6cfqydk.js.map → chunk-4h947jd8.js.map} +0 -0
- /package/dist/{chunk-gqdd7508.js.map → chunk-4rh2m6zg.js.map} +0 -0
- /package/dist/{chunk-pxtrxm3p.js.map → chunk-a09jx26t.js.map} +0 -0
- /package/dist/{chunk-4p9rh7jj.js.map → chunk-ea73pzk7.js.map} +0 -0
- /package/dist/{chunk-4aw0jwk0.js.map → chunk-f6erf2vv.js.map} +0 -0
- /package/dist/{chunk-c8bw2b6c.js.map → chunk-gadsm794.js.map} +0 -0
- /package/dist/{chunk-n5x5y80a.js.map → chunk-nzw7sm3b.js.map} +0 -0
- /package/dist/{chunk-261ag4t4.js.map → chunk-r0rry8dn.js.map} +0 -0
- /package/dist/{chunk-d2adj15j.js.map → chunk-tkdscva6.js.map} +0 -0
- /package/dist/{chunk-z8j83gzd.js.map → chunk-x2yw73hy.js.map} +0 -0
- /package/dist/{chunk-qer6am8w.js.map → chunk-xdf9yswn.js.map} +0 -0
- /package/dist/{chunk-km4rkj4t.js.map → chunk-zp2v2rv6.js.map} +0 -0
|
@@ -4,24 +4,24 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { TrustedPrimitiveRef } from \"../execution\"\nimport type { ActionRunRecord, QueueActionRunInput, Storage } from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution chain required by an Action-run storage fixture. */\nexport async function createTestActionExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly actionId: string\n readonly runId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const parentExecutionId = `test_request_execution:${input.runId}`\n const executionId = input.executionId ?? `test_action_execution:${input.runId}`\n const primitive: TrustedPrimitiveRef = {\n kind: \"action\",\n id: input.actionId,\n runId: input.runId,\n }\n\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const parent = await executions.getById({ projectId: input.projectId, id: parentExecutionId })\n if (!parent) {\n await executions.create({\n id: parentExecutionId,\n projectId: input.projectId,\n executor: { type: \"request\", requestId: `test_request:${input.runId}` },\n source: { type: \"http\", requestId: `test_request:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"disabled\" },\n })\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"execution\", executionId: parentExecutionId },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n\n return executionId\n}\n\n/** Queue an Action run with the valid durable execution fixture required by every provider. */\nexport async function queueTestActionRun(\n storage: Pick<Storage, \"actionRuns\" | \"executions\">,\n input: Omit<QueueActionRunInput, \"executionId\">\n): Promise<ActionRunRecord> {\n if (!storage.actionRuns) throw new Error(\"Action run storage is not configured for this test.\")\n const executionId = await createTestActionExecution(storage.executions, {\n projectId: input.projectId,\n actionId: input.actionId,\n runId: input.id,\n })\n return storage.actionRuns.queue({ ...input, executionId })\n}\n",
|
|
6
6
|
"import { agentServiceAccountId } from \"../agents/authority\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport { AuthStorageError } from \"../storage/auth\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution chain required by an Agent-run storage fixture. */\nexport async function createTestAgentExecution(\n storage: { readonly auth?: AuthStorage; readonly executions: ExecutionStorage },\n input: {\n readonly projectId: string\n readonly agentId: string\n readonly runId: string\n readonly executionId?: string\n readonly sourceExecutionId?: string\n }\n): Promise<string> {\n const auth = storage.auth\n if (!auth) throw new Error(\"Agent execution fixtures require auth storage.\")\n const serviceAccountId = agentServiceAccountId(input.agentId)\n const serviceAccount = await auth.serviceAccounts.getById({\n projectId: input.projectId,\n id: serviceAccountId,\n })\n if (!serviceAccount) {\n const now = new Date()\n try {\n await auth.serviceAccounts.create({\n id: serviceAccountId,\n projectId: input.projectId,\n name: `Test Agent ${input.agentId}`,\n description: `Test service account for Agent '${input.agentId}'.`,\n status: \"active\",\n createdByPrincipal: { type: \"system\", id: \"test\" },\n createdAt: now,\n updatedAt: now,\n })\n } catch (error) {\n if (!(error instanceof AuthStorageError) || error.code !== \"duplicate_service_account\") {\n throw error\n }\n }\n }\n\n const sourceExecutionId = input.sourceExecutionId ?? `test_request_execution:${input.runId}`\n const executionId = input.executionId ?? `test_agent_execution:${input.runId}`\n const existing = await storage.executions.getById({\n projectId: input.projectId,\n id: executionId,\n })\n if (existing) return executionId\n\n let parent = await storage.executions.getById({\n projectId: input.projectId,\n id: sourceExecutionId,\n })\n if (!parent) {\n parent = await storage.executions.create({\n id: sourceExecutionId,\n projectId: input.projectId,\n executor: { type: \"request\", requestId: `test_request:${input.runId}` },\n source: { type: \"http\", requestId: `test_request:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"disabled\" },\n })\n }\n await storage.executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"agent\", runId: input.runId },\n source: { type: \"execution\", executionId: sourceExecutionId },\n ...(parent.requestedBy === undefined\n ? {}\n : { requestedBy: structuredClone(parent.requestedBy) }),\n correlationId: parent.correlationId,\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"serviceAccount\", id: serviceAccountId },\n },\n })\n return executionId\n}\n",
|
|
7
|
-
"import { describe, expect, test } from \"bun:test\"\nimport { AGENT_MESSAGE_CONTENT_VERSION } from \"../agents/message\"\nimport type { Principal } from \"../auth\"\nimport type { SixbFailure } from \"../errors/types\"\nimport {\n type AgentRunExecution,\n type AgentRunFailureCode,\n type AgentStorage,\n AgentStorageError,\n type AgentStorageErrorCode,\n type CreateAgentContextCheckpointInput,\n type CreateAgentRunInput,\n type CreateAgentThreadInput,\n type StartAgentRunInput,\n} from \"../storage/agents\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport type { ExecutionStorage } from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\nimport { createTestAgentExecution } from \"./agent-execution\"\n\nexport interface AgentStorageContractStorage extends Pick<Storage, \"transaction\"> {\n readonly agents: AgentStorage\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface AgentStorageContractSuiteOptions<\n TStorage extends AgentStorageContractStorage = AgentStorageContractStorage,\n> {\n /** Factory that produces a fresh storage bundle for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst otherProjectId = \"project-b\"\nconst owner: Principal = { type: \"user\", id: \"usr_1\" }\nconst serviceAccount: Extract<Principal, { readonly type: \"serviceAccount\" }> = {\n type: \"serviceAccount\",\n id: \"svc_agent_sales\",\n}\n\nfunction failure(\n message: string,\n at: string,\n code: AgentRunFailureCode = \"internal.unexpected\"\n): SixbFailure<AgentRunFailureCode> {\n return { code, message, retryable: false, at }\n}\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nasync function expectAgentError(\n promise: Promise<unknown>,\n code: AgentStorageErrorCode\n): Promise<void> {\n await expect(promise).rejects.toBeInstanceOf(AgentStorageError)\n await expect(promise).rejects.toMatchObject({ code })\n}\n\nfunction threadInput(overrides: Partial<CreateAgentThreadInput> = {}): CreateAgentThreadInput {\n return {\n id: \"thr_1\",\n projectId,\n agentId: \"sales\",\n ownerPrincipal: owner,\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n ...overrides,\n }\n}\n\nfunction execution(\n token: string,\n queueLeaseExpiresAt = at(\"2026-06-23T10:05:00.000Z\")\n): AgentRunExecution {\n return { token, queueLeaseExpiresAt }\n}\n\ntype TestRunInput = CreateAgentRunInput &\n Omit<StartAgentRunInput, \"id\" | \"projectId\"> & {\n readonly id: string\n readonly projectId: string\n }\n\nfunction runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {\n const input = {\n id: \"run_1\",\n projectId,\n threadId: \"thr_1\",\n agentId: \"sales\",\n triggerMessageId: \"msg_user_1\",\n executionId: \"test_agent_execution:run_1\",\n requesterGroupIds: [\"support\", \"engineering\", \"support\"],\n execution: execution(\"exec_1\"),\n createdAt: at(\"2026-06-23T10:00:10.000Z\"),\n ...overrides,\n }\n return {\n ...input,\n executionId: overrides.executionId ?? `test_agent_execution:${input.id}`,\n }\n}\n\nfunction checkpointInput(\n overrides: Partial<CreateAgentContextCheckpointInput> = {}\n): CreateAgentContextCheckpointInput {\n return {\n id: \"checkpoint_1\",\n projectId,\n threadId: \"thr_1\",\n createdByRunId: \"run_2\",\n expectedPreviousCheckpointId: null,\n expectedHeadSeq: 3,\n executionToken: \"exec_2\",\n reason: \"threshold\",\n summary: \"The user asked for one and the agent answered two.\",\n summaryFormatVersion: 1,\n summarizedThroughSeq: 2,\n observedHeadSeq: 3,\n estimatedInputTokensBefore: 1_000,\n estimatedInputTokensAfter: 300,\n summaryModelId: \"test-model\",\n createdAt: at(\"2026-06-23T10:03:00.000Z\"),\n ...overrides,\n }\n}\n\nasync function createAndStartRun(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage,\n input: TestRunInput\n): Promise<Awaited<ReturnType<AgentStorage[\"runs\"][\"start\"]>>> {\n await createRun(storage, fixture, input)\n return storage.runs.start({\n id: input.id,\n projectId: input.projectId,\n modelId: input.modelId,\n execution: input.execution,\n startedAt: input.startedAt,\n })\n}\n\nasync function createRun(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage,\n input: CreateAgentRunInput\n) {\n await createTestAgentExecution(fixture, {\n projectId: input.projectId,\n agentId: input.agentId,\n runId: input.id,\n executionId: input.executionId,\n })\n return storage.runs.create(input)\n}\n\nasync function prepareCheckpointCandidate(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage\n): Promise<void> {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"one\" }],\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"two\" }],\n })\n await storage.runs.finish({\n id: \"run_1\",\n projectId,\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n await storage.messages.append({\n id: \"m3\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"three\" }],\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", triggerMessageId: \"m3\", execution: execution(\"exec_2\") })\n )\n}\n\n/**\n * Runs the shared `AgentStorage` contract against any storage implementation.\n *\n * This is the storage-independent specification for Sixb agent persistence: thread lifecycle and\n * project isolation, single-flight run reservation, execution reclaim, run finalization with\n * execution metadata, message append with thread-stats bookkeeping, and fenced context checkpoints.\n */\nexport function runAgentStorageContractSuite<TStorage extends AgentStorageContractStorage>(\n label: string,\n options: AgentStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (storage: AgentStorage, fixture: TStorage) => Promise<void>\n ): Promise<void> => {\n const fixture = await options.createStorage()\n try {\n await body(fixture.agents, fixture)\n } finally {\n await options.teardown?.(fixture)\n }\n }\n\n describe(label, () => {\n // ── threads ───────────────────────────────────────────────────────────────────────────────\n\n test(\"creates threads, isolates projects, and rejects duplicate ids\", async () => {\n await withStorage(async (storage) => {\n const thread = await storage.threads.create(threadInput({ title: \"Q3 pipeline\" }))\n expect(thread).toMatchObject({\n id: \"thr_1\",\n agentId: \"sales\",\n title: \"Q3 pipeline\",\n status: \"active\",\n activeRunId: null,\n messageCount: 0,\n })\n expect(thread.ownerPrincipal).toEqual(owner)\n\n await expectAgentError(storage.threads.create(threadInput()), \"duplicate_id\")\n\n // Same id under a different project is allowed and isolated.\n await expect(\n storage.threads.create(threadInput({ projectId: otherProjectId }))\n ).resolves.toMatchObject({ projectId: otherProjectId })\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n title: \"Q3 pipeline\",\n })\n await expect(\n storage.threads.getById({ projectId: \"nope\", id: \"thr_1\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"lists threads with filters, ordering, and pagination\", async () => {\n await withStorage(async (storage) => {\n await storage.threads.create(\n threadInput({ id: \"thr_a\", agentId: \"sales\", createdAt: at(\"2026-06-23T10:00:00.000Z\") })\n )\n await storage.threads.create(\n threadInput({\n id: \"thr_b\",\n agentId: \"support\",\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n )\n await storage.threads.create(\n threadInput({\n id: \"thr_c\",\n agentId: \"sales\",\n status: \"archived\",\n createdAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n )\n await storage.threads.create(threadInput({ id: \"thr_other\", projectId: otherProjectId }))\n\n const all = await storage.threads.list({ projectId, order: \"asc\" })\n expect(all.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\", \"thr_c\"])\n expect(all.total).toBe(3)\n expect(all.hasMore).toBe(false)\n\n const sales = await storage.threads.list({ projectId, agentId: \"sales\", order: \"asc\" })\n expect(sales.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_c\"])\n\n const visibleAgents = await storage.threads.list({\n projectId,\n agentIds: [\"support\"],\n order: \"asc\",\n })\n expect(visibleAgents.threads.map((thread) => thread.id)).toEqual([\"thr_b\"])\n\n const salesVisibleAgents = await storage.threads.list({\n projectId,\n agentId: \"sales\",\n agentIds: [\"support\"],\n order: \"asc\",\n })\n expect(salesVisibleAgents.threads).toEqual([])\n expect(salesVisibleAgents.total).toBe(0)\n\n const active = await storage.threads.list({ projectId, statuses: [\"active\"], order: \"asc\" })\n expect(active.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\"])\n\n const firstPage = await storage.threads.list({ projectId, order: \"asc\", limit: 2 })\n expect(firstPage.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\"])\n expect(firstPage.hasMore).toBe(true)\n expect(firstPage.total).toBe(3)\n\n const secondPage = await storage.threads.list({\n projectId,\n order: \"asc\",\n limit: 2,\n offset: 2,\n })\n expect(secondPage.threads.map((thread) => thread.id)).toEqual([\"thr_c\"])\n expect(secondPage.hasMore).toBe(false)\n })\n })\n\n // ── durable queued runs ────────────────────────────────────────────────────────────────────\n\n test(\"creates a queued run before execution and claims the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const queued = await createRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(queued).toMatchObject({ status: \"queued\", attempt: 0, threadId: \"thr_1\" })\n expect(queued.execution).toBeUndefined()\n expect(queued.startedAt).toBeUndefined()\n await expect(storage.runs.list({ projectId, statuses: [\"queued\"] })).resolves.toMatchObject(\n {\n runs: [{ id: \"run_1\", status: \"queued\" }],\n total: 1,\n }\n )\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: \"run_1\",\n })\n\n const started = await storage.runs.start({\n projectId,\n id: \"run_1\",\n modelId: \"test-model\",\n execution: execution(\"exec_1\"),\n startedAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(started).toMatchObject({ status: \"running\", attempt: 1, modelId: \"test-model\" })\n expect(started.execution).toEqual(execution(\"exec_1\"))\n expect(started.executionId).toBe(\"test_agent_execution:run_1\")\n expect(started.startedAt?.toISOString()).toBe(\"2026-06-23T10:01:00.000Z\")\n })\n })\n\n test(\"rejects a run whose durable execution does not match its Agent authority\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n const executionId = await createTestAgentExecution(fixture, {\n projectId,\n agentId: \"support\",\n runId: \"run_1\",\n })\n\n await expectAgentError(\n storage.runs.create(runInput({ id: \"run_1\", executionId })),\n \"invalid_input\"\n )\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n })\n })\n\n test(\"finishes a queued run and releases the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const cancelled = await storage.runs.finishQueued({\n projectId,\n id: \"run_1\",\n status: \"cancelled\",\n error: failure(\n \"Cancelled before execution\",\n \"2026-06-23T10:01:00.000Z\",\n \"runtime.cancelled\"\n ),\n completedAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(cancelled).toMatchObject({\n status: \"cancelled\",\n attempt: 0,\n error: failure(\n \"Cancelled before execution\",\n \"2026-06-23T10:01:00.000Z\",\n \"runtime.cancelled\"\n ),\n })\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n await expectAgentError(\n storage.runs.start({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_1\"),\n }),\n \"invalid_state\"\n )\n\n await createRun(storage, fixture, runInput({ id: \"run_2\" }))\n await expect(\n storage.runs.finishQueued({\n projectId,\n id: \"run_2\",\n status: \"failed\",\n error: failure(\"Agent is unavailable\", \"2026-06-23T10:02:00.000Z\"),\n completedAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n status: \"failed\",\n attempt: 0,\n error: failure(\"Agent is unavailable\", \"2026-06-23T10:02:00.000Z\"),\n })\n })\n })\n\n // ── single-flight execution ─────────────────────────────────────────────────────────────────\n\n test(\"allows a single active run per thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(run).toMatchObject({ status: \"running\", attempt: 1, threadId: \"thr_1\" })\n expect(run.executionId).toBe(\"test_agent_execution:run_1\")\n expect(run.requesterGroupIds).toEqual([\"engineering\", \"support\"])\n expect(run.execution?.token).toBe(\"exec_1\")\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: \"run_1\",\n })\n\n await expectAgentError(\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", execution: execution(\"exec_2\") })\n ),\n \"active_run_exists\"\n )\n\n // Reservation against an unknown thread / duplicate run id.\n await expectAgentError(\n createAndStartRun(storage, fixture, runInput({ id: \"run_x\", threadId: \"ghost\" })),\n \"thread_not_found\"\n )\n })\n })\n\n test(\"never lets two concurrent queued runs both claim one thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const results = await Promise.allSettled([\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_a\", execution: execution(\"exec_a\") })\n ),\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_b\", execution: execution(\"exec_b\") })\n ),\n ])\n const fulfilled = results.filter((result) => result.status === \"fulfilled\")\n const rejected = results.filter(\n (result): result is PromiseRejectedResult => result.status === \"rejected\"\n )\n expect(fulfilled).toHaveLength(1)\n expect(rejected).toHaveLength(1)\n expect(rejected[0].reason).toBeInstanceOf(AgentStorageError)\n expect(rejected[0].reason.code).toBe(\"active_run_exists\")\n })\n })\n\n // ── execution reclaim ───────────────────────────────────────────────────────────────────────\n\n test(\"reclaim rotates the execution token and bumps the attempt\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const reclaimed = await storage.runs.reclaim({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_2\"),\n })\n expect(reclaimed).toMatchObject({ status: \"running\", attempt: 2 })\n expect(reclaimed.execution?.token).toBe(\"exec_2\")\n\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n }),\n \"execution_lost\"\n )\n })\n })\n\n test(\"projects confirmed queue ownership monotonically and fences stale executions\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_1\",\n execution: execution(\"exec_1\", at(\"2026-06-23T10:02:00.000Z\")),\n })\n )\n\n const confirmed = await storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:03:00.000Z\"),\n })\n expect(confirmed.execution?.queueLeaseExpiresAt.toISOString()).toBe(\n \"2026-06-23T10:03:00.000Z\"\n )\n\n const older = await storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:02:30.000Z\"),\n })\n expect(older.execution?.queueLeaseExpiresAt.toISOString()).toBe(\"2026-06-23T10:03:00.000Z\")\n\n await storage.runs.reclaim({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_2\", at(\"2026-06-23T10:04:00.000Z\")),\n })\n await expectAgentError(\n storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:05:00.000Z\"),\n }),\n \"execution_lost\"\n )\n })\n })\n\n test(\"does not alias stored run records to callers\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const mutableExecution = run.execution as\n | { token: string; queueLeaseExpiresAt: Date }\n | undefined\n if (mutableExecution) {\n mutableExecution.token = \"mutated\"\n mutableExecution.queueLeaseExpiresAt.setTime(0)\n }\n ;(run.requesterGroupIds as string[]).push(\"mutated\")\n const reread = await storage.runs.getById({ projectId, id: \"run_1\" })\n expect(reread?.execution?.token).toBe(\"exec_1\")\n expect(reread?.requesterGroupIds).toEqual([\"engineering\", \"support\"])\n })\n })\n\n // ── finalization ────────────────────────────────────────────────────────────────────────────\n\n test(\"releasing a run only clears its own thread's active pointer\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_1\" }))\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\", threadId: \"thr_1\" }))\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_2\",\n threadId: \"thr_2\",\n execution: execution(\"exec_2\"),\n })\n )\n\n await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n // thr_2's pointer is untouched — the release is scoped to the run's own thread + matching id.\n await expect(storage.threads.getById({ projectId, id: \"thr_2\" })).resolves.toMatchObject({\n activeRunId: \"run_2\",\n })\n })\n })\n\n test(\"finishes a run, records execution metadata, and releases the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const finished = await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n modelId: \"claude-haiku-4-5\",\n finishReason: \"stop\",\n diagnostics: [\n {\n code: \"output_file_too_large\",\n severity: \"warning\",\n scope: \"output\",\n path: \"reports/full.csv\",\n message: \"This generated file was skipped.\",\n },\n ],\n completedAt: at(\"2026-06-23T10:07:00.000Z\"),\n })\n expect(finished).toMatchObject({\n status: \"succeeded\",\n modelId: \"claude-haiku-4-5\",\n finishReason: \"stop\",\n })\n expect(finished.diagnostics).toEqual([\n {\n code: \"output_file_too_large\",\n severity: \"warning\",\n scope: \"output\",\n path: \"reports/full.csv\",\n message: \"This generated file was skipped.\",\n },\n ])\n await expect(\n storage.runs.getByIds({ projectId, ids: [\"run_1\", \"missing\", \"run_1\"] })\n ).resolves.toEqual([finished])\n expect(finished.execution).toBeUndefined()\n expect(finished.completedAt?.toISOString()).toBe(\"2026-06-23T10:07:00.000Z\")\n\n // The thread is released → a new queued run can be created and started.\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n await expect(\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", execution: execution(\"exec_2\") })\n )\n ).resolves.toMatchObject({ status: \"running\" })\n })\n })\n\n test(\"records failure detail and rejects a non-running run or stale execution\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"wrong\",\n status: \"failed\",\n error: failure(\"boom\", \"2026-06-23T10:08:00.000Z\"),\n }),\n \"execution_lost\"\n )\n\n const failed = await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"failed\",\n error: failure(\"ProviderError: boom\", \"2026-06-23T10:08:00.000Z\"),\n completedAt: at(\"2026-06-23T10:08:00.000Z\"),\n })\n expect(failed.status).toBe(\"failed\")\n expect(failed.error).toEqual(failure(\"ProviderError: boom\", \"2026-06-23T10:08:00.000Z\"))\n\n // Already terminal → cannot finish again.\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n }),\n \"invalid_state\"\n )\n })\n })\n\n test(\"lists runs with thread, status, and ordering filters\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_1\" }))\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_1\",\n threadId: \"thr_1\",\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n )\n await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_2\",\n threadId: \"thr_1\",\n execution: execution(\"exec_2\"),\n createdAt: at(\"2026-06-23T10:30:00.000Z\"),\n })\n )\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_3\",\n threadId: \"thr_2\",\n execution: execution(\"exec_3\"),\n createdAt: at(\"2026-06-23T10:45:00.000Z\"),\n })\n )\n\n const forThread1 = await storage.runs.list({ projectId, threadId: \"thr_1\", order: \"asc\" })\n expect(forThread1.runs.map((run) => run.id)).toEqual([\"run_1\", \"run_2\"])\n\n const running = await storage.runs.list({ projectId, statuses: [\"running\"], order: \"asc\" })\n expect(running.runs.map((run) => run.id)).toEqual([\"run_2\", \"run_3\"])\n\n const all = await storage.runs.list({ projectId, order: \"desc\" })\n expect(all.runs.map((run) => run.id)).toEqual([\"run_3\", \"run_2\", \"run_1\"])\n })\n })\n\n test(\"filters queued runs by their effective created timestamp\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_before\" }))\n await storage.threads.create(threadInput({ id: \"thr_inside\" }))\n await storage.threads.create(threadInput({ id: \"thr_after\" }))\n\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_before\",\n threadId: \"thr_before\",\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n )\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_inside\",\n threadId: \"thr_inside\",\n createdAt: at(\"2026-06-23T11:00:00.000Z\"),\n })\n )\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_after\",\n threadId: \"thr_after\",\n createdAt: at(\"2026-06-23T12:00:00.000Z\"),\n })\n )\n\n const result = await storage.runs.list({\n projectId,\n statuses: [\"queued\"],\n startedAfter: at(\"2026-06-23T10:30:00.000Z\"),\n startedBefore: at(\"2026-06-23T11:30:00.000Z\"),\n order: \"asc\",\n })\n expect(result.runs.map((run) => run.id)).toEqual([\"run_inside\"])\n expect(result.total).toBe(1)\n expect(result.hasMore).toBe(false)\n })\n })\n\n // ── messages ──────────────────────────────────────────────────────────────────────────────\n\n test(\"appends messages, assigns seq, and bumps thread stats\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const userMessage = await storage.messages.append({\n id: \"msg_user_1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"Hello agent\" }],\n authorPrincipal: owner,\n createdAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n expect(userMessage).toMatchObject({\n seq: 1,\n role: \"user\",\n runId: null,\n contentVersion: AGENT_MESSAGE_CONTENT_VERSION,\n })\n expect(userMessage.authorPrincipal).toEqual(owner)\n\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(run.executionId).toBe(\"test_agent_execution:run_1\")\n const assistantMessage = await storage.messages.append({\n id: \"msg_asst_1\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n authorPrincipal: serviceAccount,\n parts: [\n { type: \"reasoning\", text: \"thinking about it\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"bash\",\n input: { cmd: \"ls\" },\n state: \"output-available\",\n output: \"file.txt\",\n },\n { type: \"text\", text: \"Here is the result\" },\n ],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(assistantMessage).toMatchObject({ seq: 2, role: \"assistant\", runId: \"run_1\" })\n expect(assistantMessage.authorPrincipal).toEqual(serviceAccount)\n\n const thread = await storage.threads.getById({ projectId, id: \"thr_1\" })\n expect(thread).toMatchObject({ messageCount: 2 })\n expect(thread?.lastMessageAt?.toISOString()).toBe(\"2026-06-23T10:01:00.000Z\")\n\n // The message's `parts` are the canonical content and round-trip verbatim through storage.\n const stored = await storage.messages.getById({ projectId, id: \"msg_asst_1\" })\n expect(stored?.seq).toBe(2)\n expect(stored?.parts).toEqual([\n { type: \"reasoning\", text: \"thinking about it\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"bash\",\n input: { cmd: \"ls\" },\n state: \"output-available\",\n output: \"file.txt\",\n },\n { type: \"text\", text: \"Here is the result\" },\n ])\n })\n })\n\n test(\"deletes messages produced by a run and repairs thread stats\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"msg_user_1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"Try this\" }],\n createdAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"msg_asst_1\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [\n { type: \"text\", text: \"Partial answer\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"search\",\n input: { query: \"sixb\" },\n state: \"output-available\",\n output: { matches: 1 },\n },\n ],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n\n await expect(\n storage.messages.deleteByRunId({ projectId, threadId: \"thr_1\", runId: \"run_1\" })\n ).resolves.toBe(1)\n await expect(storage.messages.getById({ projectId, id: \"msg_asst_1\" })).resolves.toBeNull()\n\n const messages = await storage.messages.list({ projectId, threadId: \"thr_1\" })\n expect(messages.messages.map((message) => message.id)).toEqual([\"msg_user_1\"])\n expect(messages.total).toBe(1)\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n messageCount: 1,\n lastMessageAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n\n await expect(\n storage.messages.deleteByRunId({ projectId, threadId: \"thr_1\", runId: \"run_1\" })\n ).resolves.toBe(0)\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n messageCount: 1,\n lastMessageAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n })\n })\n\n test(\"lists messages with role filter, ordering, and pagination\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"one\" }],\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"two\" }],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n await storage.messages.append({\n id: \"m3\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"three\" }],\n createdAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n\n const asc = await storage.messages.list({ projectId, threadId: \"thr_1\", order: \"asc\" })\n expect(asc.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\", \"m3\"])\n expect(asc.total).toBe(3)\n\n const desc = await storage.messages.list({ projectId, threadId: \"thr_1\", order: \"desc\" })\n expect(desc.messages.map((message) => message.id)).toEqual([\"m3\", \"m2\", \"m1\"])\n\n const users = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n roles: [\"user\"],\n order: \"asc\",\n })\n expect(users.messages.map((message) => message.id)).toEqual([\"m1\", \"m3\"])\n\n const retainedTail = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n afterSeq: 1,\n order: \"asc\",\n })\n expect(retainedTail.messages.map((message) => message.id)).toEqual([\"m2\", \"m3\"])\n expect(retainedTail.total).toBe(2)\n\n const firstPage = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n order: \"asc\",\n limit: 2,\n })\n expect(firstPage.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\"])\n expect(firstPage.hasMore).toBe(true)\n })\n })\n\n test(\"rejects appends to missing threads, duplicate messages, and unknown runs\", async () => {\n await withStorage(async (storage) => {\n await expectAgentError(\n storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"ghost\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"hi\" }],\n }),\n \"thread_not_found\"\n )\n\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"hi\" }],\n })\n await expectAgentError(\n storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"dup\" }],\n }),\n \"duplicate_id\"\n )\n await expectAgentError(\n storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"ghost-run\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"hi\" }],\n }),\n \"run_not_found\"\n )\n })\n })\n\n // ── context checkpoints ─────────────────────────────────────────────────────────────────\n\n test(\"creates an idempotent checkpoint without mutating the transcript\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n const threadBefore = await storage.threads.getById({ projectId, id: \"thr_1\" })\n const [created, replayed] = await Promise.all([\n storage.checkpoints.create(checkpointInput()),\n storage.checkpoints.create(checkpointInput()),\n ])\n\n expect(replayed).toEqual(created)\n expect(created).toMatchObject({\n id: \"checkpoint_1\",\n createdByRunId: \"run_2\",\n summarizedThroughSeq: 2,\n observedHeadSeq: 3,\n })\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n created\n )\n expect(\n await storage.checkpoints.getLatest({ projectId: otherProjectId, threadId: \"thr_1\" })\n ).toBeNull()\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_2\" })).toBeNull()\n\n const retained = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n afterSeq: created.summarizedThroughSeq,\n order: \"asc\",\n })\n expect(retained.messages.map((message) => message.id)).toEqual([\"m3\"])\n\n const complete = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n order: \"asc\",\n })\n expect(complete.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\", \"m3\"])\n expect(await storage.threads.getById({ projectId, id: \"thr_1\" })).toEqual(threadBefore)\n })\n })\n\n test(\"rejects checkpoints from an inactive run or a different thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ threadId: \"thr_2\" })),\n \"invalid_input\"\n )\n\n await storage.runs.finish({\n id: \"run_2\",\n projectId,\n executionToken: \"exec_2\",\n status: \"failed\",\n })\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"invalid_state\")\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toBeNull()\n })\n })\n\n test(\"rolls back a checkpoint with its containing storage transaction\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n const rollback = new Error(\"rollback checkpoint\")\n\n await expect(\n fixture.transaction(async (tx) => {\n if (!tx.agents) throw new Error(\"Expected agent storage in transaction.\")\n const created = await tx.agents.checkpoints.create(checkpointInput())\n expect(await tx.agents.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n created\n )\n throw rollback\n })\n ).rejects.toBe(rollback)\n\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toBeNull()\n })\n })\n\n test(\"fences checkpoint creation by execution, message head, and prior checkpoint\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ executionToken: \"stale\" })),\n \"execution_lost\"\n )\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({ expectedHeadSeq: 2, observedHeadSeq: 2, summarizedThroughSeq: 1 })\n ),\n \"invalid_state\"\n )\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({ expectedPreviousCheckpointId: \"checkpoint_missing\" })\n ),\n \"invalid_state\"\n )\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ summarizedThroughSeq: 1 })),\n \"invalid_input\"\n )\n\n await storage.runs.reclaim({\n id: \"run_2\",\n projectId,\n execution: execution(\"exec_2_reclaimed\"),\n })\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"execution_lost\")\n\n const reclaimedInput = checkpointInput({ executionToken: \"exec_2_reclaimed\" })\n await storage.checkpoints.create(reclaimedInput)\n await expectAgentError(\n storage.checkpoints.create({ ...reclaimedInput, summary: \"different\" }),\n \"invalid_state\"\n )\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"execution_lost\")\n await storage.messages.append({\n id: \"m4\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_2\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"four\" }],\n })\n await expectAgentError(storage.checkpoints.create(reclaimedInput), \"invalid_state\")\n })\n })\n\n test(\"chains checkpoints only when the retained boundary advances\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.checkpoints.create(checkpointInput())\n await storage.messages.append({\n id: \"m4\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_2\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"four\" }],\n })\n await storage.runs.finish({\n id: \"run_2\",\n projectId,\n executionToken: \"exec_2\",\n status: \"succeeded\",\n })\n await storage.messages.append({\n id: \"m5\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"five\" }],\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_3\", triggerMessageId: \"m5\", execution: execution(\"exec_3\") })\n )\n\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({\n id: \"checkpoint_2\",\n createdByRunId: \"run_3\",\n expectedPreviousCheckpointId: \"checkpoint_1\",\n expectedHeadSeq: 5,\n executionToken: \"exec_3\",\n summarizedThroughSeq: 2,\n observedHeadSeq: 5,\n })\n ),\n \"invalid_input\"\n )\n\n const second = await storage.checkpoints.create(\n checkpointInput({\n id: \"checkpoint_2\",\n createdByRunId: \"run_3\",\n expectedPreviousCheckpointId: \"checkpoint_1\",\n expectedHeadSeq: 5,\n executionToken: \"exec_3\",\n summary: \"The prior summary was extended through the fourth message.\",\n summarizedThroughSeq: 4,\n observedHeadSeq: 5,\n createdAt: at(\"2026-06-23T10:05:00.000Z\"),\n })\n )\n expect(second.previousCheckpointId).toBe(\"checkpoint_1\")\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n second\n )\n })\n })\n })\n}\n",
|
|
7
|
+
"import { describe, expect, test } from \"bun:test\"\nimport { AGENT_MESSAGE_CONTENT_VERSION } from \"../agents/message\"\nimport type { Principal } from \"../auth\"\nimport type { SixbFailure } from \"../errors/types\"\nimport {\n type AgentRunExecution,\n type AgentRunFailureCode,\n type AgentStorage,\n AgentStorageError,\n type AgentStorageErrorCode,\n type CreateAgentContextCheckpointInput,\n type CreateAgentRunInput,\n type CreateAgentThreadInput,\n type StartAgentRunInput,\n} from \"../storage/agents\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport type { ExecutionStorage } from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\nimport { createTestAgentExecution } from \"./agent-execution\"\n\nexport interface AgentStorageContractStorage extends Pick<Storage, \"transaction\"> {\n readonly agents: AgentStorage\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface AgentStorageContractSuiteOptions<\n TStorage extends AgentStorageContractStorage = AgentStorageContractStorage,\n> {\n /** Factory that produces a fresh storage bundle for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst otherProjectId = \"project-b\"\nconst owner: Principal = { type: \"user\", id: \"usr_1\" }\nconst serviceAccount: Extract<Principal, { readonly type: \"serviceAccount\" }> = {\n type: \"serviceAccount\",\n id: \"svc_agent_sales\",\n}\n\nfunction failure(\n message: string,\n at: string,\n code: AgentRunFailureCode = \"internal.unexpected\"\n): SixbFailure<AgentRunFailureCode> {\n return { code, message, retryable: false, at }\n}\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nasync function expectAgentError(\n promise: Promise<unknown>,\n code: AgentStorageErrorCode\n): Promise<void> {\n await expect(promise).rejects.toBeInstanceOf(AgentStorageError)\n await expect(promise).rejects.toMatchObject({ code })\n}\n\nfunction threadInput(overrides: Partial<CreateAgentThreadInput> = {}): CreateAgentThreadInput {\n return {\n id: \"thr_1\",\n projectId,\n agentId: \"sales\",\n ownerPrincipal: owner,\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n ...overrides,\n }\n}\n\nfunction execution(\n token: string,\n queueLeaseExpiresAt = at(\"2026-06-23T10:05:00.000Z\")\n): AgentRunExecution {\n return { token, queueLeaseExpiresAt }\n}\n\ntype TestRunInput = CreateAgentRunInput &\n Omit<StartAgentRunInput, \"id\" | \"projectId\"> & {\n readonly id: string\n readonly projectId: string\n }\n\nfunction runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {\n const input = {\n id: \"run_1\",\n projectId,\n threadId: \"thr_1\",\n agentId: \"sales\",\n triggerMessageId: \"msg_user_1\",\n executionId: \"test_agent_execution:run_1\",\n requesterGroupIds: [\"support\", \"engineering\", \"support\"],\n execution: execution(\"exec_1\"),\n createdAt: at(\"2026-06-23T10:00:10.000Z\"),\n ...overrides,\n }\n return {\n ...input,\n executionId: overrides.executionId ?? `test_agent_execution:${input.id}`,\n }\n}\n\nfunction checkpointInput(\n overrides: Partial<CreateAgentContextCheckpointInput> = {}\n): CreateAgentContextCheckpointInput {\n return {\n id: \"checkpoint_1\",\n projectId,\n threadId: \"thr_1\",\n createdByRunId: \"run_2\",\n expectedPreviousCheckpointId: null,\n expectedHeadSeq: 3,\n executionToken: \"exec_2\",\n reason: \"threshold\",\n summary: \"The user asked for one and the agent answered two.\",\n summaryFormatVersion: 1,\n summarizedThroughSeq: 2,\n observedHeadSeq: 3,\n estimatedInputTokensBefore: 1_000,\n estimatedInputTokensAfter: 300,\n summaryModelId: \"test-model\",\n createdAt: at(\"2026-06-23T10:03:00.000Z\"),\n ...overrides,\n }\n}\n\nasync function createAndStartRun(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage,\n input: TestRunInput\n): Promise<Awaited<ReturnType<AgentStorage[\"runs\"][\"start\"]>>> {\n await createRun(storage, fixture, input)\n return storage.runs.start({\n id: input.id,\n projectId: input.projectId,\n modelId: input.modelId,\n execution: input.execution,\n startedAt: input.startedAt,\n })\n}\n\nasync function createRun(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage,\n input: CreateAgentRunInput\n) {\n await createTestAgentExecution(fixture, {\n projectId: input.projectId,\n agentId: input.agentId,\n runId: input.id,\n executionId: input.executionId,\n })\n return storage.runs.create(input)\n}\n\nasync function prepareCheckpointCandidate(\n storage: AgentStorage,\n fixture: AgentStorageContractStorage\n): Promise<void> {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"one\" }],\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"two\" }],\n })\n await storage.runs.finish({\n id: \"run_1\",\n projectId,\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n await storage.messages.append({\n id: \"m3\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"three\" }],\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", triggerMessageId: \"m3\", execution: execution(\"exec_2\") })\n )\n}\n\n/**\n * Runs the shared `AgentStorage` contract against any storage implementation.\n *\n * This is the storage-independent specification for Sixb agent persistence: thread lifecycle and\n * project isolation, single-flight run reservation, execution reclaim, run finalization with\n * execution metadata, message append with thread-stats bookkeeping, and fenced context checkpoints.\n */\nexport function runAgentStorageContractSuite<TStorage extends AgentStorageContractStorage>(\n label: string,\n options: AgentStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (storage: AgentStorage, fixture: TStorage) => Promise<void>\n ): Promise<void> => {\n const fixture = await options.createStorage()\n try {\n await body(fixture.agents, fixture)\n } finally {\n await options.teardown?.(fixture)\n }\n }\n\n describe(label, () => {\n // ── threads ───────────────────────────────────────────────────────────────────────────────\n\n test(\"creates threads, isolates projects, and rejects duplicate ids\", async () => {\n await withStorage(async (storage) => {\n const thread = await storage.threads.create(threadInput({ title: \"Q3 pipeline\" }))\n expect(thread).toMatchObject({\n id: \"thr_1\",\n agentId: \"sales\",\n title: \"Q3 pipeline\",\n status: \"active\",\n activeRunId: null,\n messageCount: 0,\n })\n expect(thread.ownerPrincipal).toEqual(owner)\n\n await expectAgentError(storage.threads.create(threadInput()), \"duplicate_id\")\n\n // Same id under a different project is allowed and isolated.\n await expect(\n storage.threads.create(threadInput({ projectId: otherProjectId }))\n ).resolves.toMatchObject({ projectId: otherProjectId })\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n title: \"Q3 pipeline\",\n })\n await expect(\n storage.threads.getById({ projectId: \"nope\", id: \"thr_1\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"lists threads with filters, ordering, and pagination\", async () => {\n await withStorage(async (storage) => {\n await storage.threads.create(\n threadInput({ id: \"thr_a\", agentId: \"sales\", createdAt: at(\"2026-06-23T10:00:00.000Z\") })\n )\n await storage.threads.create(\n threadInput({\n id: \"thr_b\",\n agentId: \"support\",\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n )\n await storage.threads.create(\n threadInput({\n id: \"thr_c\",\n agentId: \"sales\",\n status: \"archived\",\n createdAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n )\n await storage.threads.create(threadInput({ id: \"thr_other\", projectId: otherProjectId }))\n\n const all = await storage.threads.list({ projectId, order: \"asc\" })\n expect(all.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\", \"thr_c\"])\n expect(all.total).toBe(3)\n expect(all.hasMore).toBe(false)\n\n const sales = await storage.threads.list({ projectId, agentId: \"sales\", order: \"asc\" })\n expect(sales.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_c\"])\n\n const visibleAgents = await storage.threads.list({\n projectId,\n agentIds: [\"support\"],\n order: \"asc\",\n })\n expect(visibleAgents.threads.map((thread) => thread.id)).toEqual([\"thr_b\"])\n\n const salesVisibleAgents = await storage.threads.list({\n projectId,\n agentId: \"sales\",\n agentIds: [\"support\"],\n order: \"asc\",\n })\n expect(salesVisibleAgents.threads).toEqual([])\n expect(salesVisibleAgents.total).toBe(0)\n\n const active = await storage.threads.list({ projectId, statuses: [\"active\"], order: \"asc\" })\n expect(active.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\"])\n\n const firstPage = await storage.threads.list({ projectId, order: \"asc\", limit: 2 })\n expect(firstPage.threads.map((thread) => thread.id)).toEqual([\"thr_a\", \"thr_b\"])\n expect(firstPage.hasMore).toBe(true)\n expect(firstPage.total).toBe(3)\n\n const secondPage = await storage.threads.list({\n projectId,\n order: \"asc\",\n limit: 2,\n offset: 2,\n })\n expect(secondPage.threads.map((thread) => thread.id)).toEqual([\"thr_c\"])\n expect(secondPage.hasMore).toBe(false)\n })\n })\n\n // ── durable queued runs ────────────────────────────────────────────────────────────────────\n\n test(\"creates a queued run before execution and claims the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const queued = await createRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(queued).toMatchObject({ status: \"queued\", attempt: 0, threadId: \"thr_1\" })\n expect(queued.execution).toBeUndefined()\n expect(queued.startedAt).toBeUndefined()\n await expect(storage.runs.list({ projectId, statuses: [\"queued\"] })).resolves.toMatchObject(\n {\n runs: [{ id: \"run_1\", status: \"queued\" }],\n total: 1,\n }\n )\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: \"run_1\",\n })\n\n const started = await storage.runs.start({\n projectId,\n id: \"run_1\",\n modelId: \"test-model\",\n execution: execution(\"exec_1\"),\n startedAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(started).toMatchObject({ status: \"running\", attempt: 1, modelId: \"test-model\" })\n expect(started.execution).toEqual(execution(\"exec_1\"))\n expect(started.executionId).toBe(\"test_agent_execution:run_1\")\n expect(started.startedAt?.toISOString()).toBe(\"2026-06-23T10:01:00.000Z\")\n })\n })\n\n test(\"rejects a run whose durable execution does not match its Agent authority\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n const executionId = await createTestAgentExecution(fixture, {\n projectId,\n agentId: \"support\",\n runId: \"run_1\",\n })\n\n await expectAgentError(\n storage.runs.create(runInput({ id: \"run_1\", executionId })),\n \"invalid_input\"\n )\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n })\n })\n\n test(\"finishes a queued run and releases the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const cancelled = await storage.runs.finishQueued({\n projectId,\n id: \"run_1\",\n status: \"cancelled\",\n error: failure(\n \"Cancelled before execution\",\n \"2026-06-23T10:01:00.000Z\",\n \"runtime.cancelled\"\n ),\n completedAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(cancelled).toMatchObject({\n status: \"cancelled\",\n attempt: 0,\n error: failure(\n \"Cancelled before execution\",\n \"2026-06-23T10:01:00.000Z\",\n \"runtime.cancelled\"\n ),\n })\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n await expectAgentError(\n storage.runs.start({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_1\"),\n }),\n \"invalid_state\"\n )\n\n await createRun(storage, fixture, runInput({ id: \"run_2\" }))\n await expect(\n storage.runs.finishQueued({\n projectId,\n id: \"run_2\",\n status: \"failed\",\n error: failure(\"Agent is unavailable\", \"2026-06-23T10:02:00.000Z\"),\n completedAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n status: \"failed\",\n attempt: 0,\n error: failure(\"Agent is unavailable\", \"2026-06-23T10:02:00.000Z\"),\n })\n })\n })\n\n // ── single-flight execution ─────────────────────────────────────────────────────────────────\n\n test(\"allows a single active run per thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(run).toMatchObject({ status: \"running\", attempt: 1, threadId: \"thr_1\" })\n expect(run.executionId).toBe(\"test_agent_execution:run_1\")\n expect(run.requesterGroupIds).toEqual([\"engineering\", \"support\"])\n expect(run.execution?.token).toBe(\"exec_1\")\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: \"run_1\",\n })\n\n await expectAgentError(\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", execution: execution(\"exec_2\") })\n ),\n \"active_run_exists\"\n )\n\n // Reservation against an unknown thread / duplicate run id.\n await expectAgentError(\n createAndStartRun(storage, fixture, runInput({ id: \"run_x\", threadId: \"ghost\" })),\n \"thread_not_found\"\n )\n })\n })\n\n test(\"never lets two concurrent queued runs both claim one thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const results = await Promise.allSettled([\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_a\", execution: execution(\"exec_a\") })\n ),\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_b\", execution: execution(\"exec_b\") })\n ),\n ])\n const fulfilled = results.filter((result) => result.status === \"fulfilled\")\n const rejected = results.filter(\n (result): result is PromiseRejectedResult => result.status === \"rejected\"\n )\n expect(fulfilled).toHaveLength(1)\n expect(rejected).toHaveLength(1)\n expect(rejected[0].reason).toBeInstanceOf(AgentStorageError)\n expect(rejected[0].reason.code).toBe(\"active_run_exists\")\n })\n })\n\n // ── execution reclaim ───────────────────────────────────────────────────────────────────────\n\n test(\"reclaim rotates the execution token and bumps the attempt\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const reclaimed = await storage.runs.reclaim({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_2\"),\n })\n expect(reclaimed).toMatchObject({ status: \"running\", attempt: 2 })\n expect(reclaimed.execution?.token).toBe(\"exec_2\")\n\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n }),\n \"execution_lost\"\n )\n })\n })\n\n test(\"projects confirmed queue ownership monotonically and fences stale executions\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_1\",\n execution: execution(\"exec_1\", at(\"2026-06-23T10:02:00.000Z\")),\n })\n )\n\n const confirmed = await storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:03:00.000Z\"),\n })\n expect(confirmed.execution?.queueLeaseExpiresAt.toISOString()).toBe(\n \"2026-06-23T10:03:00.000Z\"\n )\n\n const older = await storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:02:30.000Z\"),\n })\n expect(older.execution?.queueLeaseExpiresAt.toISOString()).toBe(\"2026-06-23T10:03:00.000Z\")\n\n await storage.runs.reclaim({\n projectId,\n id: \"run_1\",\n execution: execution(\"exec_2\", at(\"2026-06-23T10:04:00.000Z\")),\n })\n await expectAgentError(\n storage.runs.confirmExecutionOwnership({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n queueLeaseExpiresAt: at(\"2026-06-23T10:05:00.000Z\"),\n }),\n \"execution_lost\"\n )\n })\n })\n\n test(\"does not alias stored run records to callers\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const mutableExecution = run.execution as\n | { token: string; queueLeaseExpiresAt: Date }\n | undefined\n if (mutableExecution) {\n mutableExecution.token = \"mutated\"\n mutableExecution.queueLeaseExpiresAt.setTime(0)\n }\n ;(run.requesterGroupIds as string[]).push(\"mutated\")\n const reread = await storage.runs.getById({ projectId, id: \"run_1\" })\n expect(reread?.execution?.token).toBe(\"exec_1\")\n expect(reread?.requesterGroupIds).toEqual([\"engineering\", \"support\"])\n })\n })\n\n // ── finalization ────────────────────────────────────────────────────────────────────────────\n\n test(\"releasing a run only clears its own thread's active pointer\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_1\" }))\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\", threadId: \"thr_1\" }))\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_2\",\n threadId: \"thr_2\",\n execution: execution(\"exec_2\"),\n })\n )\n\n await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n // thr_2's pointer is untouched — the release is scoped to the run's own thread + matching id.\n await expect(storage.threads.getById({ projectId, id: \"thr_2\" })).resolves.toMatchObject({\n activeRunId: \"run_2\",\n })\n })\n })\n\n test(\"finishes a run, records execution metadata, and releases the thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n const finished = await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n modelId: \"claude-haiku-4-5\",\n finishReason: \"stop\",\n diagnostics: [\n {\n code: \"output_file_too_large\",\n severity: \"warning\",\n scope: \"output\",\n path: \"reports/full.csv\",\n message: \"This generated file was skipped.\",\n },\n ],\n completedAt: at(\"2026-06-23T10:07:00.000Z\"),\n })\n expect(finished).toMatchObject({\n status: \"succeeded\",\n modelId: \"claude-haiku-4-5\",\n finishReason: \"stop\",\n })\n expect(finished.diagnostics).toEqual([\n {\n code: \"output_file_too_large\",\n severity: \"warning\",\n scope: \"output\",\n path: \"reports/full.csv\",\n message: \"This generated file was skipped.\",\n },\n ])\n await expect(\n storage.runs.getByIds({ projectId, ids: [\"run_1\", \"missing\", \"run_1\"] })\n ).resolves.toEqual([finished])\n expect(finished.execution).toBeUndefined()\n expect(finished.completedAt?.toISOString()).toBe(\"2026-06-23T10:07:00.000Z\")\n\n // The thread is released → a new queued run can be created and started.\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n activeRunId: null,\n })\n await expect(\n createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_2\", execution: execution(\"exec_2\") })\n )\n ).resolves.toMatchObject({ status: \"running\" })\n })\n })\n\n test(\"records failure detail and rejects a non-running run or stale execution\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"wrong\",\n status: \"failed\",\n error: failure(\"boom\", \"2026-06-23T10:08:00.000Z\"),\n }),\n \"execution_lost\"\n )\n\n const failed = await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"failed\",\n error: failure(\"ProviderError: boom\", \"2026-06-23T10:08:00.000Z\"),\n completedAt: at(\"2026-06-23T10:08:00.000Z\"),\n })\n expect(failed.status).toBe(\"failed\")\n expect(failed.error).toEqual(failure(\"ProviderError: boom\", \"2026-06-23T10:08:00.000Z\"))\n\n // Already terminal → cannot finish again.\n await expectAgentError(\n storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n }),\n \"invalid_state\"\n )\n })\n })\n\n test(\"lists runs with thread, status, and ordering filters\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_1\" }))\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_1\",\n threadId: \"thr_1\",\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n )\n await storage.runs.finish({\n projectId,\n id: \"run_1\",\n executionToken: \"exec_1\",\n status: \"succeeded\",\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_2\",\n threadId: \"thr_1\",\n execution: execution(\"exec_2\"),\n createdAt: at(\"2026-06-23T10:30:00.000Z\"),\n })\n )\n await createAndStartRun(\n storage,\n fixture,\n runInput({\n id: \"run_3\",\n threadId: \"thr_2\",\n execution: execution(\"exec_3\"),\n createdAt: at(\"2026-06-23T10:45:00.000Z\"),\n })\n )\n\n const forThread1 = await storage.runs.list({ projectId, threadId: \"thr_1\", order: \"asc\" })\n expect(forThread1.runs.map((run) => run.id)).toEqual([\"run_1\", \"run_2\"])\n\n const running = await storage.runs.list({ projectId, statuses: [\"running\"], order: \"asc\" })\n expect(running.runs.map((run) => run.id)).toEqual([\"run_2\", \"run_3\"])\n\n const all = await storage.runs.list({ projectId, order: \"desc\" })\n expect(all.runs.map((run) => run.id)).toEqual([\"run_3\", \"run_2\", \"run_1\"])\n })\n })\n\n test(\"filters queued runs by their effective created timestamp\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput({ id: \"thr_before\" }))\n await storage.threads.create(threadInput({ id: \"thr_inside\" }))\n await storage.threads.create(threadInput({ id: \"thr_after\" }))\n\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_before\",\n threadId: \"thr_before\",\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n )\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_inside\",\n threadId: \"thr_inside\",\n createdAt: at(\"2026-06-23T11:00:00.000Z\"),\n })\n )\n await createRun(\n storage,\n fixture,\n runInput({\n id: \"run_after\",\n threadId: \"thr_after\",\n createdAt: at(\"2026-06-23T12:00:00.000Z\"),\n })\n )\n\n const result = await storage.runs.list({\n projectId,\n statuses: [\"queued\"],\n startedAfter: at(\"2026-06-23T10:30:00.000Z\"),\n startedBefore: at(\"2026-06-23T11:30:00.000Z\"),\n order: \"asc\",\n })\n expect(result.runs.map((run) => run.id)).toEqual([\"run_inside\"])\n expect(result.total).toBe(1)\n expect(result.hasMore).toBe(false)\n })\n })\n\n // ── messages ──────────────────────────────────────────────────────────────────────────────\n\n test(\"appends messages, assigns seq, and bumps thread stats\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n\n const userMessage = await storage.messages.append({\n id: \"msg_user_1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"Hello agent\" }],\n authorPrincipal: owner,\n createdAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n expect(userMessage).toMatchObject({\n seq: 1,\n role: \"user\",\n runId: null,\n contentVersion: AGENT_MESSAGE_CONTENT_VERSION,\n })\n expect(userMessage.authorPrincipal).toEqual(owner)\n\n const run = await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n expect(run.executionId).toBe(\"test_agent_execution:run_1\")\n const assistantMessage = await storage.messages.append({\n id: \"msg_asst_1\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n authorPrincipal: serviceAccount,\n parts: [\n { type: \"reasoning\", text: \"thinking about it\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"bash\",\n input: { cmd: \"ls\" },\n state: \"output-available\",\n output: \"file.txt\",\n },\n { type: \"text\", text: \"Here is the result\" },\n ],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n expect(assistantMessage).toMatchObject({ seq: 2, role: \"assistant\", runId: \"run_1\" })\n expect(assistantMessage.authorPrincipal).toEqual(serviceAccount)\n\n const thread = await storage.threads.getById({ projectId, id: \"thr_1\" })\n expect(thread).toMatchObject({ messageCount: 2 })\n expect(thread?.lastMessageAt?.toISOString()).toBe(\"2026-06-23T10:01:00.000Z\")\n\n // The message's `parts` are the canonical content and round-trip verbatim through storage.\n const stored = await storage.messages.getById({ projectId, id: \"msg_asst_1\" })\n expect(stored?.seq).toBe(2)\n expect(stored?.parts).toEqual([\n { type: \"reasoning\", text: \"thinking about it\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"bash\",\n input: { cmd: \"ls\" },\n state: \"output-available\",\n output: \"file.txt\",\n },\n { type: \"text\", text: \"Here is the result\" },\n ])\n })\n })\n\n test(\"deletes messages produced by a run and repairs thread stats\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"msg_user_1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"Try this\" }],\n createdAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"msg_asst_1\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [\n { type: \"text\", text: \"Partial answer\" },\n {\n type: \"tool-call\",\n toolCallId: \"call_1\",\n toolName: \"search\",\n input: { query: \"sixb\" },\n state: \"output-available\",\n output: { matches: 1 },\n },\n ],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n\n await expect(\n storage.messages.deleteByRunId({ projectId, threadId: \"thr_1\", runId: \"run_1\" })\n ).resolves.toBe(1)\n await expect(storage.messages.getById({ projectId, id: \"msg_asst_1\" })).resolves.toBeNull()\n\n const messages = await storage.messages.list({ projectId, threadId: \"thr_1\" })\n expect(messages.messages.map((message) => message.id)).toEqual([\"msg_user_1\"])\n expect(messages.total).toBe(1)\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n messageCount: 1,\n lastMessageAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n\n await expect(\n storage.messages.deleteByRunId({ projectId, threadId: \"thr_1\", runId: \"run_1\" })\n ).resolves.toBe(0)\n await expect(storage.threads.getById({ projectId, id: \"thr_1\" })).resolves.toMatchObject({\n messageCount: 1,\n lastMessageAt: at(\"2026-06-23T10:00:30.000Z\"),\n })\n })\n })\n\n test(\"lists messages with role filter, ordering, and pagination\", async () => {\n await withStorage(async (storage, fixture) => {\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"one\" }],\n createdAt: at(\"2026-06-23T10:00:00.000Z\"),\n })\n await createAndStartRun(storage, fixture, runInput({ id: \"run_1\" }))\n await storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_1\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"two\" }],\n createdAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n await storage.messages.append({\n id: \"m3\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"three\" }],\n createdAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n\n const asc = await storage.messages.list({ projectId, threadId: \"thr_1\", order: \"asc\" })\n expect(asc.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\", \"m3\"])\n expect(asc.total).toBe(3)\n\n const desc = await storage.messages.list({ projectId, threadId: \"thr_1\", order: \"desc\" })\n expect(desc.messages.map((message) => message.id)).toEqual([\"m3\", \"m2\", \"m1\"])\n\n const users = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n roles: [\"user\"],\n order: \"asc\",\n })\n expect(users.messages.map((message) => message.id)).toEqual([\"m1\", \"m3\"])\n\n const retainedTail = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n afterSeq: 1,\n order: \"asc\",\n })\n expect(retainedTail.messages.map((message) => message.id)).toEqual([\"m2\", \"m3\"])\n expect(retainedTail.total).toBe(2)\n\n const firstPage = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n order: \"asc\",\n limit: 2,\n })\n expect(firstPage.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\"])\n expect(firstPage.hasMore).toBe(true)\n })\n })\n\n test(\"rejects appends to missing threads, duplicate messages, and unknown runs\", async () => {\n await withStorage(async (storage) => {\n await expectAgentError(\n storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"ghost\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"hi\" }],\n }),\n \"thread_not_found\"\n )\n\n await storage.threads.create(threadInput())\n await storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"hi\" }],\n })\n await expectAgentError(\n storage.messages.append({\n id: \"m1\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"dup\" }],\n }),\n \"duplicate_id\"\n )\n await expectAgentError(\n storage.messages.append({\n id: \"m2\",\n projectId,\n threadId: \"thr_1\",\n runId: \"ghost-run\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"hi\" }],\n }),\n \"run_not_found\"\n )\n })\n })\n\n // ── context checkpoints ─────────────────────────────────────────────────────────────────\n\n test(\"creates an idempotent checkpoint without mutating the transcript\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n const threadBefore = await storage.threads.getById({ projectId, id: \"thr_1\" })\n const [created, replayed] = await Promise.all([\n storage.checkpoints.create(checkpointInput()),\n storage.checkpoints.create(checkpointInput()),\n ])\n\n expect(replayed).toEqual(created)\n expect(created).toMatchObject({\n id: \"checkpoint_1\",\n createdByRunId: \"run_2\",\n summarizedThroughSeq: 2,\n observedHeadSeq: 3,\n })\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n created\n )\n expect(\n await storage.checkpoints.getLatest({ projectId: otherProjectId, threadId: \"thr_1\" })\n ).toBeNull()\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_2\" })).toBeNull()\n await expect(\n storage.checkpoints.getByRunIds({\n projectId,\n runIds: [\"run_2\", \"missing\", \"run_2\"],\n })\n ).resolves.toEqual([created])\n await expect(\n storage.checkpoints.getByRunIds({\n projectId: otherProjectId,\n runIds: [\"run_2\"],\n })\n ).resolves.toEqual([])\n\n const retained = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n afterSeq: created.summarizedThroughSeq,\n order: \"asc\",\n })\n expect(retained.messages.map((message) => message.id)).toEqual([\"m3\"])\n\n const complete = await storage.messages.list({\n projectId,\n threadId: \"thr_1\",\n order: \"asc\",\n })\n expect(complete.messages.map((message) => message.id)).toEqual([\"m1\", \"m2\", \"m3\"])\n expect(await storage.threads.getById({ projectId, id: \"thr_1\" })).toEqual(threadBefore)\n })\n })\n\n test(\"rejects checkpoints from an inactive run or a different thread\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.threads.create(threadInput({ id: \"thr_2\" }))\n\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ threadId: \"thr_2\" })),\n \"invalid_input\"\n )\n\n await storage.runs.finish({\n id: \"run_2\",\n projectId,\n executionToken: \"exec_2\",\n status: \"failed\",\n })\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"invalid_state\")\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toBeNull()\n })\n })\n\n test(\"rolls back a checkpoint with its containing storage transaction\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n const rollback = new Error(\"rollback checkpoint\")\n\n await expect(\n fixture.transaction(async (tx) => {\n if (!tx.agents) throw new Error(\"Expected agent storage in transaction.\")\n const created = await tx.agents.checkpoints.create(checkpointInput())\n expect(await tx.agents.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n created\n )\n throw rollback\n })\n ).rejects.toBe(rollback)\n\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toBeNull()\n })\n })\n\n test(\"fences checkpoint creation by execution, message head, and prior checkpoint\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ executionToken: \"stale\" })),\n \"execution_lost\"\n )\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({ expectedHeadSeq: 2, observedHeadSeq: 2, summarizedThroughSeq: 1 })\n ),\n \"invalid_state\"\n )\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({ expectedPreviousCheckpointId: \"checkpoint_missing\" })\n ),\n \"invalid_state\"\n )\n await expectAgentError(\n storage.checkpoints.create(checkpointInput({ summarizedThroughSeq: 1 })),\n \"invalid_input\"\n )\n\n await storage.runs.reclaim({\n id: \"run_2\",\n projectId,\n execution: execution(\"exec_2_reclaimed\"),\n })\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"execution_lost\")\n\n const reclaimedInput = checkpointInput({ executionToken: \"exec_2_reclaimed\" })\n await storage.checkpoints.create(reclaimedInput)\n await expectAgentError(\n storage.checkpoints.create({ ...reclaimedInput, summary: \"different\" }),\n \"invalid_state\"\n )\n await expectAgentError(storage.checkpoints.create(checkpointInput()), \"execution_lost\")\n await storage.messages.append({\n id: \"m4\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_2\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"four\" }],\n })\n await expectAgentError(storage.checkpoints.create(reclaimedInput), \"invalid_state\")\n })\n })\n\n test(\"chains checkpoints only when the retained boundary advances\", async () => {\n await withStorage(async (storage, fixture) => {\n await prepareCheckpointCandidate(storage, fixture)\n await storage.checkpoints.create(checkpointInput())\n await storage.messages.append({\n id: \"m4\",\n projectId,\n threadId: \"thr_1\",\n runId: \"run_2\",\n role: \"assistant\",\n parts: [{ type: \"text\", text: \"four\" }],\n })\n await storage.runs.finish({\n id: \"run_2\",\n projectId,\n executionToken: \"exec_2\",\n status: \"succeeded\",\n })\n await storage.messages.append({\n id: \"m5\",\n projectId,\n threadId: \"thr_1\",\n runId: null,\n role: \"user\",\n parts: [{ type: \"text\", text: \"five\" }],\n })\n await createAndStartRun(\n storage,\n fixture,\n runInput({ id: \"run_3\", triggerMessageId: \"m5\", execution: execution(\"exec_3\") })\n )\n\n await expectAgentError(\n storage.checkpoints.create(\n checkpointInput({\n id: \"checkpoint_2\",\n createdByRunId: \"run_3\",\n expectedPreviousCheckpointId: \"checkpoint_1\",\n expectedHeadSeq: 5,\n executionToken: \"exec_3\",\n summarizedThroughSeq: 2,\n observedHeadSeq: 5,\n })\n ),\n \"invalid_input\"\n )\n\n const second = await storage.checkpoints.create(\n checkpointInput({\n id: \"checkpoint_2\",\n createdByRunId: \"run_3\",\n expectedPreviousCheckpointId: \"checkpoint_1\",\n expectedHeadSeq: 5,\n executionToken: \"exec_3\",\n summary: \"The prior summary was extended through the fourth message.\",\n summarizedThroughSeq: 4,\n observedHeadSeq: 5,\n createdAt: at(\"2026-06-23T10:05:00.000Z\"),\n })\n )\n expect(second.previousCheckpointId).toBe(\"checkpoint_1\")\n expect(await storage.checkpoints.getLatest({ projectId, threadId: \"thr_1\" })).toEqual(\n second\n )\n })\n })\n })\n}\n",
|
|
8
8
|
"import { describe, expect, test } from \"bun:test\"\nimport type { AiCostStorage, AiModelCallCostRecord } from \"../storage/ai-cost\"\nimport { AiCostStorageError } from \"../storage/ai-cost\"\nimport type { AiUsageStorage } from \"../storage/ai-usage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\nexport interface AiStorageContractSuiteOptions<TStorage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly setup?: (storage: TStorage) => void | Promise<void>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"cost-contract-project\"\nconst executionId = \"exec_cost_1\"\nconst otherExecutionId = \"exec_cost_2\"\n\nfunction priceSource(entry: string) {\n return {\n sourceId: \"test-catalog\",\n sourceEntryId: entry,\n sourceVersion: \"test-catalog-v1\",\n sourceUrl: \"https://example.test/ai-pricing.json\",\n observedAt: new Date(\"2026-08-01T00:00:00.000Z\"),\n }\n}\n\nfunction ratedCost(\n usageRecordId = \"usage_1\",\n overrides: Partial<Extract<AiModelCallCostRecord, { status: \"rated\" }>> = {}\n): Extract<AiModelCallCostRecord, { status: \"rated\" }> {\n return {\n projectId,\n usageRecordId,\n status: \"rated\",\n billingIdentity: { providerId: \"vercel\", modelId: \"openai/gpt-5\" },\n pricingContext: {},\n priceSource: priceSource(\"vercel/openai/gpt-5\"),\n money: { currency: \"USD\", amountNanos: \"95000\" },\n components: [\n {\n meter: \"tokens.input.uncached\",\n quantity: \"12\",\n rateAmountNanosPerMillion: \"1250000000\",\n chargeAmountNanos: \"15000\",\n },\n {\n meter: \"tokens.input.cacheRead\",\n quantity: \"0\",\n rateAmountNanosPerMillion: \"125000000\",\n chargeAmountNanos: \"0\",\n },\n {\n meter: \"tokens.output.total\",\n quantity: \"8\",\n rateAmountNanosPerMillion: \"10000000000\",\n chargeAmountNanos: \"80000\",\n },\n ],\n ratedAt: new Date(\"2026-08-01T12:00:00.200Z\"),\n ...overrides,\n }\n}\n\nfunction unpriceableCost(): Extract<AiModelCallCostRecord, { status: \"unpriceable\" }> {\n return {\n projectId,\n usageRecordId: \"usage_2\",\n status: \"unpriceable\",\n billingIdentity: { providerId: \"vercel\", modelId: \"unpriced/model\" },\n pricingContext: {},\n priceSource: priceSource(\"vercel/unpriced/model\"),\n reason: \"missingCatalogEntry\",\n ratedAt: new Date(\"2026-08-01T12:00:00.200Z\"),\n }\n}\n\nexport function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(\n name: string,\n options: AiStorageContractSuiteOptions<TStorage>\n): void {\n describe(name, () => {\n async function fixture(): Promise<TStorage> {\n const storage = await options.createStorage()\n await options.setup?.(storage)\n return storage\n }\n\n test(\"records model-call costs idempotently\", async () => {\n const storage = await fixture()\n try {\n await expect(storage.recordModelCallCost(ratedCost())).resolves.toBeUndefined()\n await expect(storage.recordModelCallCost(ratedCost())).resolves.toBeUndefined()\n await expect(\n storage.listModelCalls({\n projectId,\n from: new Date(\"2026-08-01T00:00:00.000Z\"),\n to: new Date(\"2026-08-02T00:00:00.000Z\"),\n valuationStatus: \"rated\",\n })\n ).resolves.toMatchObject({\n total: 1,\n items: [{ usage: { id: \"usage_1\" }, cost: ratedCost(), valuationStatus: \"rated\" }],\n })\n } finally {\n await options.cleanup?.(storage)\n }\n })\n\n test(\"stores explicit unpriceable results and pricing context\", async () => {\n const storage = await fixture()\n try {\n const deploymentCost: AiModelCallCostRecord = {\n projectId,\n usageRecordId: \"usage_deployment\",\n status: \"unpriceable\",\n billingIdentity: { providerId: \"openai\", modelId: \"gpt-5\" },\n pricingContext: { deploymentId: \"production\" },\n priceSource: priceSource(\"openai/gpt-5\"),\n reason: \"unsupportedPricingDimension\",\n ratedAt: new Date(\"2026-08-03T12:00:00.200Z\"),\n }\n await storage.recordModelCallCost(unpriceableCost())\n await storage.recordModelCallCost(deploymentCost)\n await expect(\n storage.listModelCalls({\n projectId,\n from: new Date(\"2026-08-03T00:00:00.000Z\"),\n to: new Date(\"2026-08-04T00:00:00.000Z\"),\n valuationStatus: \"unpriceable\",\n })\n ).resolves.toMatchObject({\n total: 1,\n items: [{ cost: deploymentCost, valuationStatus: \"unpriceable\" }],\n })\n } finally {\n await options.cleanup?.(storage)\n }\n })\n\n test(\"summarizes and queries accounting without inventing missing costs\", async () => {\n const storage = await fixture()\n try {\n await storage.recordModelCallCost(ratedCost())\n await storage.recordModelCallCost(unpriceableCost())\n await expect(\n storage.summarizeExecutions({ projectId, executionIds: [executionId] })\n ).resolves.toEqual([\n {\n amounts: [{ currency: \"USD\", amountNanos: \"95000\" }],\n ratedCallCount: 1,\n unpriceableCallCount: 1,\n unvaluedCallCount: 1,\n },\n ])\n\n const overview = await storage.queryProjectOverview({\n projectId,\n from: new Date(\"2026-08-01T00:00:00.000Z\"),\n to: new Date(\"2026-08-02T00:00:00.000Z\"),\n bucket: \"day\",\n })\n expect(overview.totals).toEqual({\n modelCallCount: 3,\n usage: {\n inputTokens: 15,\n outputTokens: 12,\n totalTokens: 27,\n reportingStatus: \"complete\",\n },\n costs: {\n amounts: [{ currency: \"USD\", amountNanos: \"95000\" }],\n ratedCallCount: 1,\n unpriceableCallCount: 1,\n unvaluedCallCount: 1,\n },\n })\n expect(overview.series).toMatchObject([{ modelCallCount: 3 }])\n expect(overview.models).toMatchObject([\n { providerId: \"gateway\", modelId: \"openai/gpt-5\", modelCallCount: 2 },\n { providerId: \"gateway\", modelId: \"unpriced/model\", modelCallCount: 1 },\n ])\n await expect(\n storage.queryProjectOverview({\n projectId,\n from: new Date(\"2026-08-01T00:00:00.000Z\"),\n to: new Date(\"2026-08-02T00:00:00.000Z\"),\n bucket: \"day\",\n providerId: \"gateway\",\n modelId: \"unpriced/model\",\n })\n ).resolves.toMatchObject({ totals: { modelCallCount: 1 } })\n await expect(\n storage.listModelCalls({\n projectId,\n from: new Date(\"2026-08-01T00:00:00.000Z\"),\n to: new Date(\"2026-08-02T00:00:00.000Z\"),\n limit: 1,\n offset: 1,\n })\n ).resolves.toMatchObject({\n total: 3,\n hasMore: true,\n items: [{ usage: { id: \"usage_2\" } }],\n })\n await expect(\n storage.listModelCalls({\n projectId,\n from: new Date(\"2026-08-01T00:00:00.000Z\"),\n to: new Date(\"2026-08-02T00:00:00.000Z\"),\n valuationStatus: \"unpriceable\",\n })\n ).resolves.toMatchObject({\n total: 1,\n hasMore: false,\n items: [{ usage: { id: \"usage_2\" }, valuationStatus: \"unpriceable\" }],\n })\n } finally {\n await options.cleanup?.(storage)\n }\n })\n\n test(\"rejects missing usage and mismatched billed quantities\", async () => {\n const storage = await fixture()\n try {\n const missing = ratedCost(\"missing\")\n const missingError = await storage.recordModelCallCost(missing).catch((value) => value)\n expect(missingError).toBeInstanceOf(AiCostStorageError)\n expect((missingError as AiCostStorageError).code).toBe(\"missing_usage\")\n\n const base = ratedCost()\n const mismatch = ratedCost(\"usage_1\", {\n money: { currency: \"USD\", amountNanos: \"96250\" },\n components: [\n { ...base.components[0]!, quantity: \"13\", chargeAmountNanos: \"16250\" },\n ...base.components.slice(1),\n ],\n })\n const mismatchError = await storage.recordModelCallCost(mismatch).catch((value) => value)\n expect(mismatchError).toBeInstanceOf(AiCostStorageError)\n expect((mismatchError as AiCostStorageError).code).toBe(\"cost_mismatch\")\n } finally {\n await options.cleanup?.(storage)\n }\n })\n })\n}\n\n/** Seed immutable usage used by every cost-storage provider contract. */\nexport async function seedAiCostStorageContractUsage(\n executions: ExecutionStorage,\n usage: AiUsageStorage\n): Promise<void> {\n for (const fixture of [\n { projectId, executionId },\n { projectId, executionId: otherExecutionId },\n ]) {\n if (await executions.getById({ projectId: fixture.projectId, id: fixture.executionId }))\n continue\n const primitive = {\n kind: \"workflow\" as const,\n id: \"ai-cost-contract\",\n runId: fixture.executionId,\n }\n await executions.create({\n id: fixture.executionId,\n projectId: fixture.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${fixture.executionId}` },\n correlationId: `test_correlation:${fixture.executionId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n }\n\n for (const fixture of [\n { id: \"usage_1\", model: \"openai/gpt-5\", input: 12, output: 8 },\n { id: \"usage_2\", model: \"unpriced/model\", input: 1, output: 1 },\n { id: \"usage_3\", model: \"openai/gpt-5\", input: 2, output: 3 },\n ]) {\n await usage.recordModelCall({\n id: fixture.id,\n projectId,\n executionId,\n attempt: 1,\n callId: `call_${fixture.id}`,\n requesterGroupIds: [],\n providerId: \"gateway\",\n requestedModelId: fixture.model,\n responseId: `response_${projectId}_${fixture.id}`,\n usage: {\n inputTokens: fixture.input,\n outputTokens: fixture.output,\n ...(fixture.id === \"usage_1\"\n ? { uncachedInputTokens: fixture.input, cacheReadInputTokens: 0 }\n : {}),\n },\n occurredAt: new Date(\"2026-08-01T12:00:00.000Z\"),\n recordedAt: new Date(\"2026-08-01T12:00:00.100Z\"),\n })\n }\n\n await usage.recordModelCall({\n id: \"usage_deployment\",\n projectId,\n executionId: otherExecutionId,\n attempt: 1,\n callId: \"call_usage_deployment\",\n requesterGroupIds: [],\n providerId: \"openai.responses\",\n requestedModelId: \"gpt-5\",\n responseId: \"response_usage_deployment\",\n usage: {\n inputTokens: 2,\n outputTokens: 3,\n uncachedInputTokens: 2,\n cacheReadInputTokens: 0,\n },\n occurredAt: new Date(\"2026-08-03T12:00:00.000Z\"),\n recordedAt: new Date(\"2026-08-03T12:00:00.100Z\"),\n })\n}\n",
|
|
9
|
-
"import { describe, expect, test } from \"bun:test\"\nimport {\n type AiUsageStorage,\n AiUsageStorageError,\n type RecordAiModelCallInput,\n} from \"../storage/ai-usage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\nexport interface AiUsageStorageContractSuiteOptions<\n TStorage extends AiUsageStorage = AiUsageStorage,\n> {\n /** Factory that returns an isolated AI usage store for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly setup?: (storage: TStorage) => void | Promise<void>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst agentExecutionId = \"exec_agent_1\"\nconst otherAgentExecutionId = \"exec_agent_2\"\nconst workflowExecutionId = \"exec_workflow_1\"\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nfunction modelCallInput(overrides: Partial<RecordAiModelCallInput> = {}): RecordAiModelCallInput {\n return {\n id: \"usage_1\",\n projectId,\n executionId: agentExecutionId,\n attempt: 1,\n callId: \"call_1\",\n requesterGroupIds: [\"support\", \"engineering\"],\n providerId: \"gateway\",\n requestedModelId: \"openai/gpt-5\",\n responseModelId: \"gpt-5-2026-06-01\",\n responseId: \"response_1\",\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n },\n rawUsage: { input_tokens: 12, output_tokens: 8 },\n occurredAt: at(\"2026-06-23T10:00:00.000Z\"),\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n ...overrides,\n }\n}\n\n/** Runs the provider-neutral model-call ledger contract against one storage implementation. */\nexport function runAiUsageStorageContractSuite<TStorage extends AiUsageStorage>(\n label: string,\n options: AiUsageStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"records normalized usage and one canonical row per requester group\", async () => {\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n requesterGroupIds: [\"support\", \"engineering\", \"support\"],\n })\n )\n\n expect(result.created).toBe(true)\n expect(result.record).toEqual({\n ...modelCallInput(),\n requesterGroupIds: [\"engineering\", \"support\"],\n usage: {\n ...modelCallInput().usage,\n totalTokens: 20,\n reportingStatus: \"complete\",\n },\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n })\n })\n })\n\n test(\"returns the existing record when the idempotency key is replayed\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.recordModelCall(modelCallInput())\n const replay = await storage.recordModelCall(\n modelCallInput({\n id: \"ignored_retry_id\",\n requesterGroupIds: [\"different-group\"],\n usage: { inputTokens: 999, outputTokens: 1 },\n })\n )\n\n expect(first.created).toBe(true)\n expect(replay.created).toBe(false)\n expect(replay.record).toEqual(first.record)\n })\n })\n\n test(\"allows one generation call id to contain multiple billable responses\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n responseId: \"response_2\",\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"bills the same call and response IDs again on a later delivery attempt\", async () => {\n // Regression guard: remove `attempt` from a provider's idempotency key/query/index and the\n // second append collapses into the first, making the aggregate assertions fail.\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n attempt: 2,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"does not count concurrent idempotent appends twice\", async () => {\n await withStorage(async (storage) => {\n const results = await Promise.all([\n storage.recordModelCall(modelCallInput()),\n storage.recordModelCall(modelCallInput({ id: \"usage_retry\" })),\n ])\n\n expect(results.map((result) => result.created).sort()).toEqual([false, true])\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"keeps projects and workflow executions isolated\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_other_project\",\n projectId: \"other-project\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 100, outputTokens: 100 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: workflowExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n await expect(\n storage.summarizeExecution({\n projectId,\n executionId: \"exec_workflow_2\",\n })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"summarizes multiple executions in input order with one zero-call entry per miss\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.summarizeExecutions({ projectId, executionIds: [] })).resolves.toEqual(\n []\n )\n\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_agent_2\",\n executionId: otherAgentExecutionId,\n callId: \"call_agent_2\",\n responseId: \"response_agent_2\",\n usage: { inputTokens: 4, outputTokens: 6 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n callId: \"call_workflow\",\n responseId: \"response_workflow\",\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\n otherAgentExecutionId,\n \"missing\",\n workflowExecutionId,\n agentExecutionId,\n otherAgentExecutionId,\n ],\n })\n ).resolves.toEqual([\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n { modelCallCount: 0, usage: { reportingStatus: \"unavailable\" } },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n ])\n })\n })\n\n test(\"distinguishes no model calls from a call without reported usage\", async () => {\n // Regression guard: coerce nullable SQL token columns with `Number(null)` and this becomes a\n // complete zero-token report instead of an unavailable one.\n await withStorage(async (storage) => {\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n\n const result = await storage.recordModelCall(\n modelCallInput({ usage: {}, rawUsage: undefined })\n )\n\n expect(result.record.usage).toEqual({ reportingStatus: \"unavailable\" })\n expect(result.record.rawUsage).toBeUndefined()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"normalizes offset timestamps to the same UTC instants\", async () => {\n // Regression guard: persist a timezone-naive SQL timestamp and these offset-derived instants\n // shift when read under a different database or process timezone.\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n occurredAt: at(\"2026-06-23T03:04:05.678-07:00\"),\n recordedAt: at(\"2026-06-23T03:04:06.789-07:00\"),\n })\n )\n\n expect(result.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:04:05.678Z\")\n expect(result.record.recordedAt.toISOString()).toBe(\"2026-06-23T10:04:06.789Z\")\n })\n })\n\n test(\"keeps incomplete execution totals partial instead of inventing zeroes\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({ usage: { inputTokens: 10, outputTokens: 5 } })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n callId: \"call_2\",\n responseId: \"response_2\",\n usage: { inputTokens: 0 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 10,\n reportingStatus: \"partial\",\n },\n })\n })\n })\n\n test(\"defensively snapshots inputs and returned records\", async () => {\n await withStorage(async (storage) => {\n const requesterGroupIds = [\"support\"]\n const rawUsage = { nested: { cached: 3 } }\n const occurredAt = at(\"2026-06-23T10:00:00.000Z\")\n const input = modelCallInput({ requesterGroupIds, rawUsage, occurredAt })\n const first = await storage.recordModelCall(input)\n\n requesterGroupIds.push(\"mutated-input\")\n rawUsage.nested.cached = 999\n occurredAt.setTime(0)\n\n const returnedGroups = first.record.requesterGroupIds as string[]\n returnedGroups.push(\"mutated-output\")\n const returnedRaw = first.record.rawUsage as { nested: { cached: number } }\n returnedRaw.nested.cached = 888\n first.record.occurredAt.setTime(1)\n\n const replay = await storage.recordModelCall(modelCallInput())\n expect(replay.record.requesterGroupIds).toEqual([\"support\"])\n expect(replay.record.rawUsage).toEqual({ nested: { cached: 3 } })\n expect(replay.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:00:00.000Z\")\n })\n })\n\n test(\"rejects a reused record id with a different model-call identity\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n\n const error = storage.recordModelCall(\n modelCallInput({ callId: \"call_2\", responseId: \"response_2\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"duplicate_id\" })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toMatchObject({\n modelCallCount: 1,\n usage: { inputTokens: 12, outputTokens: 8, totalTokens: 20 },\n })\n })\n })\n\n test(\"rejects a model call whose durable execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const error = storage.recordModelCall(\n modelCallInput({ id: \"usage_missing\", executionId: \"exec_missing\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"missing_execution\" })\n })\n })\n\n test(\"rejects invalid execution IDs, usage, dates, groups, and raw JSON\", async () => {\n await withStorage(async (storage) => {\n const invalidInputs: RecordAiModelCallInput[] = [\n modelCallInput({ attempt: 0 }),\n modelCallInput({ providerId: \" \" }),\n modelCallInput({ requesterGroupIds: [\"\"] }),\n modelCallInput({ usage: { inputTokens: -1 } }),\n modelCallInput({ occurredAt: new Date(Number.NaN) }),\n modelCallInput({ rawUsage: { invalid: undefined } as never }),\n modelCallInput({ executionId: \"\" }),\n ]\n\n for (const input of invalidInputs) {\n await expect(storage.recordModelCall(input)).rejects.toThrow()\n }\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\"\"],\n })\n ).rejects.toThrow()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n })\n}\n\n/** Seed the immutable execution references used by the provider-neutral AI usage contract. */\nexport async function seedAiUsageStorageContractExecutions(\n executions: ExecutionStorage\n): Promise<void> {\n for (const fixture of [\n { projectId, executionId: agentExecutionId },\n { projectId, executionId: otherAgentExecutionId },\n { projectId, executionId: workflowExecutionId },\n { projectId: \"other-project\", executionId: workflowExecutionId },\n ]) {\n const existing = await executions.getById({\n projectId: fixture.projectId,\n id: fixture.executionId,\n })\n if (existing) continue\n const primitive = {\n kind: \"workflow\" as const,\n id: \"ai-usage-contract\",\n runId: fixture.executionId,\n }\n await executions.create({\n id: fixture.executionId,\n projectId: fixture.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${fixture.executionId}` },\n correlationId: `test_correlation:${fixture.executionId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n }\n}\n",
|
|
9
|
+
"import { describe, expect, test } from \"bun:test\"\nimport {\n type AiUsageStorage,\n AiUsageStorageError,\n type RecordAiModelCallInput,\n} from \"../storage/ai-usage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\nexport interface AiUsageStorageContractSuiteOptions<\n TStorage extends AiUsageStorage = AiUsageStorage,\n> {\n /** Factory that returns an isolated AI usage store for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly setup?: (storage: TStorage) => void | Promise<void>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst agentExecutionId = \"exec_agent_1\"\nconst otherAgentExecutionId = \"exec_agent_2\"\nconst workflowExecutionId = \"exec_workflow_1\"\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nfunction modelCallInput(overrides: Partial<RecordAiModelCallInput> = {}): RecordAiModelCallInput {\n return {\n id: \"usage_1\",\n projectId,\n executionId: agentExecutionId,\n attempt: 1,\n callId: \"call_1\",\n requesterGroupIds: [\"support\", \"engineering\"],\n providerId: \"gateway\",\n requestedModelId: \"openai/gpt-5\",\n responseModelId: \"gpt-5-2026-06-01\",\n responseId: \"response_1\",\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n },\n rawUsage: { input_tokens: 12, output_tokens: 8 },\n occurredAt: at(\"2026-06-23T10:00:00.000Z\"),\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n ...overrides,\n }\n}\n\n/** Runs the provider-neutral model-call ledger contract against one storage implementation. */\nexport function runAiUsageStorageContractSuite<TStorage extends AiUsageStorage>(\n label: string,\n options: AiUsageStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"records normalized usage and one canonical row per requester group\", async () => {\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n requesterGroupIds: [\"support\", \"engineering\", \"support\"],\n })\n )\n\n expect(result.created).toBe(true)\n expect(result.record).toEqual({\n ...modelCallInput(),\n requesterGroupIds: [\"engineering\", \"support\"],\n usage: {\n ...modelCallInput().usage,\n totalTokens: 20,\n reportingStatus: \"complete\",\n },\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n })\n })\n })\n\n test(\"returns the existing record when the idempotency key is replayed\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.recordModelCall(modelCallInput())\n const replay = await storage.recordModelCall(\n modelCallInput({\n id: \"ignored_retry_id\",\n requesterGroupIds: [\"different-group\"],\n usage: { inputTokens: 999, outputTokens: 1 },\n })\n )\n\n expect(first.created).toBe(true)\n expect(replay.created).toBe(false)\n expect(replay.record).toEqual(first.record)\n })\n })\n\n test(\"allows one generation call id to contain multiple billable responses\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n responseId: \"response_2\",\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"returns the latest completed call for one execution\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.getLatestForExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toBeNull()\n\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_later\",\n callId: \"call_later\",\n responseId: \"response_later\",\n occurredAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_earlier\",\n callId: \"call_earlier\",\n responseId: \"response_earlier\",\n occurredAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n )\n\n await expect(\n storage.getLatestForExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toMatchObject({ id: \"usage_later\", responseId: \"response_later\" })\n await expect(\n storage.getLatestForExecution({\n projectId: \"other-project\",\n executionId: agentExecutionId,\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"bills the same call and response IDs again on a later delivery attempt\", async () => {\n // Regression guard: remove `attempt` from a provider's idempotency key/query/index and the\n // second append collapses into the first, making the aggregate assertions fail.\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n attempt: 2,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"does not count concurrent idempotent appends twice\", async () => {\n await withStorage(async (storage) => {\n const results = await Promise.all([\n storage.recordModelCall(modelCallInput()),\n storage.recordModelCall(modelCallInput({ id: \"usage_retry\" })),\n ])\n\n expect(results.map((result) => result.created).sort()).toEqual([false, true])\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"keeps projects and workflow executions isolated\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_other_project\",\n projectId: \"other-project\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 100, outputTokens: 100 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: workflowExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n await expect(\n storage.summarizeExecution({\n projectId,\n executionId: \"exec_workflow_2\",\n })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"summarizes multiple executions in input order with one zero-call entry per miss\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.summarizeExecutions({ projectId, executionIds: [] })).resolves.toEqual(\n []\n )\n\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_agent_2\",\n executionId: otherAgentExecutionId,\n callId: \"call_agent_2\",\n responseId: \"response_agent_2\",\n usage: { inputTokens: 4, outputTokens: 6 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n callId: \"call_workflow\",\n responseId: \"response_workflow\",\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\n otherAgentExecutionId,\n \"missing\",\n workflowExecutionId,\n agentExecutionId,\n otherAgentExecutionId,\n ],\n })\n ).resolves.toEqual([\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n { modelCallCount: 0, usage: { reportingStatus: \"unavailable\" } },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n ])\n })\n })\n\n test(\"distinguishes no model calls from a call without reported usage\", async () => {\n // Regression guard: coerce nullable SQL token columns with `Number(null)` and this becomes a\n // complete zero-token report instead of an unavailable one.\n await withStorage(async (storage) => {\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n\n const result = await storage.recordModelCall(\n modelCallInput({ usage: {}, rawUsage: undefined })\n )\n\n expect(result.record.usage).toEqual({ reportingStatus: \"unavailable\" })\n expect(result.record.rawUsage).toBeUndefined()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"normalizes offset timestamps to the same UTC instants\", async () => {\n // Regression guard: persist a timezone-naive SQL timestamp and these offset-derived instants\n // shift when read under a different database or process timezone.\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n occurredAt: at(\"2026-06-23T03:04:05.678-07:00\"),\n recordedAt: at(\"2026-06-23T03:04:06.789-07:00\"),\n })\n )\n\n expect(result.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:04:05.678Z\")\n expect(result.record.recordedAt.toISOString()).toBe(\"2026-06-23T10:04:06.789Z\")\n })\n })\n\n test(\"keeps incomplete execution totals partial instead of inventing zeroes\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({ usage: { inputTokens: 10, outputTokens: 5 } })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n callId: \"call_2\",\n responseId: \"response_2\",\n usage: { inputTokens: 0 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 10,\n reportingStatus: \"partial\",\n },\n })\n })\n })\n\n test(\"defensively snapshots inputs and returned records\", async () => {\n await withStorage(async (storage) => {\n const requesterGroupIds = [\"support\"]\n const rawUsage = { nested: { cached: 3 } }\n const occurredAt = at(\"2026-06-23T10:00:00.000Z\")\n const input = modelCallInput({ requesterGroupIds, rawUsage, occurredAt })\n const first = await storage.recordModelCall(input)\n\n requesterGroupIds.push(\"mutated-input\")\n rawUsage.nested.cached = 999\n occurredAt.setTime(0)\n\n const returnedGroups = first.record.requesterGroupIds as string[]\n returnedGroups.push(\"mutated-output\")\n const returnedRaw = first.record.rawUsage as { nested: { cached: number } }\n returnedRaw.nested.cached = 888\n first.record.occurredAt.setTime(1)\n\n const replay = await storage.recordModelCall(modelCallInput())\n expect(replay.record.requesterGroupIds).toEqual([\"support\"])\n expect(replay.record.rawUsage).toEqual({ nested: { cached: 3 } })\n expect(replay.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:00:00.000Z\")\n })\n })\n\n test(\"rejects a reused record id with a different model-call identity\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n\n const error = storage.recordModelCall(\n modelCallInput({ callId: \"call_2\", responseId: \"response_2\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"duplicate_id\" })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toMatchObject({\n modelCallCount: 1,\n usage: { inputTokens: 12, outputTokens: 8, totalTokens: 20 },\n })\n })\n })\n\n test(\"rejects a model call whose durable execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const error = storage.recordModelCall(\n modelCallInput({ id: \"usage_missing\", executionId: \"exec_missing\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"missing_execution\" })\n })\n })\n\n test(\"rejects invalid execution IDs, usage, dates, groups, and raw JSON\", async () => {\n await withStorage(async (storage) => {\n const invalidInputs: RecordAiModelCallInput[] = [\n modelCallInput({ attempt: 0 }),\n modelCallInput({ providerId: \" \" }),\n modelCallInput({ requesterGroupIds: [\"\"] }),\n modelCallInput({ usage: { inputTokens: -1 } }),\n modelCallInput({ occurredAt: new Date(Number.NaN) }),\n modelCallInput({ rawUsage: { invalid: undefined } as never }),\n modelCallInput({ executionId: \"\" }),\n ]\n\n for (const input of invalidInputs) {\n await expect(storage.recordModelCall(input)).rejects.toThrow()\n }\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\"\"],\n })\n ).rejects.toThrow()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n })\n}\n\n/** Seed the immutable execution references used by the provider-neutral AI usage contract. */\nexport async function seedAiUsageStorageContractExecutions(\n executions: ExecutionStorage\n): Promise<void> {\n for (const fixture of [\n { projectId, executionId: agentExecutionId },\n { projectId, executionId: otherAgentExecutionId },\n { projectId, executionId: workflowExecutionId },\n { projectId: \"other-project\", executionId: workflowExecutionId },\n ]) {\n const existing = await executions.getById({\n projectId: fixture.projectId,\n id: fixture.executionId,\n })\n if (existing) continue\n const primitive = {\n kind: \"workflow\" as const,\n id: \"ai-usage-contract\",\n runId: fixture.executionId,\n }\n await executions.create({\n id: fixture.executionId,\n projectId: fixture.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${fixture.executionId}` },\n correlationId: `test_correlation:${fixture.executionId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n }\n}\n",
|
|
10
10
|
"import { describe, expect, test } from \"bun:test\"\nimport type {\n AuthStorage,\n AuthStorageErrorCode,\n CompleteAuthSessionInput,\n UserRecord,\n} from \"../storage/auth\"\nimport { AuthStorageError } from \"../storage/auth\"\n\nexport interface AuthStorageContractSuiteOptions<TStorage extends AuthStorage = AuthStorage> {\n /** Factory that produces a fresh `AuthStorage` instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst otherProjectId = \"project-b\"\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nfunction sessionInput(\n id: string,\n tokenHash = `${id}-hash`,\n audience: CompleteAuthSessionInput[\"audience\"] = \"atlas\",\n absoluteExpiresAt?: Date\n): CompleteAuthSessionInput {\n return {\n id,\n audience,\n tokenHash,\n createdAt: at(\"2026-05-14T10:10:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:10:00.000Z\"),\n absoluteExpiresAt,\n }\n}\n\nasync function expectAuthError(\n promise: Promise<unknown>,\n code: AuthStorageErrorCode\n): Promise<void> {\n await expect(promise).rejects.toBeInstanceOf(AuthStorageError)\n await expect(promise).rejects.toMatchObject({ code })\n}\n\nasync function createUser(\n storage: AuthStorage,\n input: {\n readonly id?: string\n readonly email?: string\n readonly status?: UserRecord[\"status\"]\n readonly projectId?: string\n } = {}\n): Promise<UserRecord> {\n return storage.users.create({\n id: input.id ?? \"usr_1\",\n projectId: input.projectId ?? projectId,\n email: input.email ?? \"ava@acme.com\",\n status: input.status,\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n}\n\n/**\n * Runs the shared `AuthStorage` contract against any storage implementation.\n *\n * The suite is the storage-independent specification for Sixb auth state: users, identities,\n * sessions, invitations, group memberships, service accounts, access tokens,\n * magic links, OIDC attempts, and atomic sign-in completion.\n */\nexport function runAuthStorageContractSuite<TStorage extends AuthStorage>(\n label: string,\n options: AuthStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"creates users with normalized email and isolates projects\", async () => {\n await withStorage(async (storage) => {\n const user = await createUser(storage, {\n email: \" Ava@Acme.COM \",\n })\n\n expect(user.email).toBe(\"ava@acme.com\")\n await expectAuthError(\n storage.users.create({\n id: \"usr_duplicate\",\n projectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n }),\n \"duplicate_user\"\n )\n\n await expect(\n storage.users.create({\n id: \"usr_other\",\n projectId: otherProjectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n projectId: otherProjectId,\n email: \"ava@acme.com\",\n })\n\n const page = await storage.users.list({ projectId, statuses: [\"active\"] })\n expect(page.users.map((row) => row.id)).toEqual([\"usr_1\"])\n })\n })\n\n test(\"upserts identities without mutating canonical user email\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_oidc\", email: \"ava@acme.com\" })\n\n await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava@acme.com\" },\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n const updated = await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava.renamed@acme.com\" },\n updatedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n expect(updated.claims).toEqual({ email: \"ava.renamed@acme.com\" })\n await expect(storage.users.getById({ projectId, id: \"usr_oidc\" })).resolves.toMatchObject({\n email: \"ava@acme.com\",\n })\n })\n })\n\n test(\"keeps multiple concurrent sessions per user and never extends expiry on touch\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const first = await storage.sessions.create({\n id: \"ses_1\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n const second = await storage.sessions.create({\n id: \"ses_2\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n createdAt: at(\"2026-05-14T10:05:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:05:00.000Z\"),\n })\n\n // Creating a second session in the same audience no longer revokes the\n // first: both stay active and authenticate independently.\n expect(first.revokedAt).toBeUndefined()\n expect(second.revokedAt).toBeUndefined()\n const storedFirst = await storage.sessions.getById({ projectId, id: \"ses_1\" })\n expect(storedFirst?.revokedAt).toBeUndefined()\n\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_1\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_1\" })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"wrong\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n // getActiveByUserId returns the most recently created active session.\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n\n const touched = await storage.sessions.touch({\n projectId,\n id: second.id,\n lastSeenAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n expect(touched.lastSeenAt?.toISOString()).toBe(\"2026-05-15T10:00:00.000Z\")\n expect(touched.expiresAt.toISOString()).toBe(\"2026-05-21T10:05:00.000Z\")\n\n // A session in a different audience coexists and is cookie-scoped.\n const appSession = await storage.sessions.create({\n id: \"ses_app\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-app\",\n createdAt: at(\"2026-05-14T10:06:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:06:00.000Z\"),\n })\n expect(appSession.revokedAt).toBeUndefined()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_app\",\n audience: \"atlas\",\n tokenHash: \"hash-app\",\n now: at(\"2026-05-14T10:07:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n // Revoking a single session leaves the user's other sessions active.\n await storage.sessions.revoke({\n projectId,\n id: \"ses_1\",\n revokedAt: at(\"2026-05-14T10:08:00.000Z\"),\n })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_1\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n now: at(\"2026-05-14T10:09:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n now: at(\"2026-05-14T10:09:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n\n // \"Sign out everywhere\": revokeActiveForUser clears every remaining\n // active session for the user, across audiences.\n const revoked = await storage.sessions.revokeActiveForUser({\n projectId,\n userId: \"usr_1\",\n revokedAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n expect(revoked.map((entry) => entry.id).sort()).toEqual([\"ses_2\", \"ses_app\"])\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-14T10:11:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"persists and enforces an optional absolute session deadline\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n const capped = await storage.sessions.create({\n id: \"ses_capped\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n absoluteExpiresAt: at(\"2026-05-16T10:00:00.000Z\"),\n })\n const uncapped = await storage.sessions.create({\n id: \"ses-uncapped\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-uncapped\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n\n expect(capped.absoluteExpiresAt?.toISOString()).toBe(\"2026-05-16T10:00:00.000Z\")\n expect(uncapped.absoluteExpiresAt).toBeUndefined()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: capped.id,\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n now: at(\"2026-05-16T09:59:59.999Z\"),\n })\n ).resolves.toMatchObject({ id: capped.id })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: capped.id,\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n const active = await storage.sessions.listActiveByUserId({\n projectId,\n userId: \"usr_1\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n expect(active.map((session) => session.id)).toEqual([uncapped.id])\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.revokeActiveForUser({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n revokedAt: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toEqual([])\n })\n })\n\n test(\"atomically renews valid sessions without exceeding the absolute deadline\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_renew\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-15T10:00:00.000Z\"),\n absoluteExpiresAt: at(\"2026-05-20T10:00:00.000Z\"),\n })\n\n const renewed = await storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-25T10:00:00.000Z\"),\n })\n expect(renewed?.expiresAt.toISOString()).toBe(\"2026-05-20T10:00:00.000Z\")\n expect(renewed?.lastSeenAt?.toISOString()).toBe(\"2026-05-14T11:00:00.000Z\")\n\n const monotonic = await storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-14T12:00:00.000Z\"),\n expiresAt: at(\"2026-05-18T10:00:00.000Z\"),\n })\n expect(monotonic?.expiresAt.toISOString()).toBe(\"2026-05-20T10:00:00.000Z\")\n\n await expect(\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"wrong-hash\",\n now: at(\"2026-05-14T13:00:00.000Z\"),\n expiresAt: at(\"2026-05-19T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-20T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n await storage.sessions.create({\n id: \"ses_concurrent\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n await Promise.all([\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_concurrent\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-18T10:00:00.000Z\"),\n }),\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_concurrent\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-19T10:00:00.000Z\"),\n }),\n ])\n const concurrent = await storage.sessions.getById({ projectId, id: \"ses_concurrent\" })\n expect(concurrent?.expiresAt.toISOString()).toBe(\"2026-05-19T10:00:00.000Z\")\n })\n })\n\n test(\"persists best-effort device metadata on a session\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const withDevice = await storage.sessions.create({\n id: \"ses_device\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-device\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n userAgent: \"Mozilla/5.0 (iPhone)\",\n ipAddress: \"203.0.113.7\",\n })\n expect(withDevice.userAgent).toBe(\"Mozilla/5.0 (iPhone)\")\n expect(withDevice.ipAddress).toBe(\"203.0.113.7\")\n await expect(\n storage.sessions.getById({ projectId, id: \"ses_device\" })\n ).resolves.toMatchObject({\n userAgent: \"Mozilla/5.0 (iPhone)\",\n ipAddress: \"203.0.113.7\",\n })\n\n // Device metadata is optional; omitting it round-trips as undefined.\n const withoutDevice = await storage.sessions.create({\n id: \"ses_plain\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-plain\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n expect(withoutDevice.userAgent).toBeUndefined()\n expect(withoutDevice.ipAddress).toBeUndefined()\n })\n })\n\n test(\"lists a user's active sessions across audiences, newest activity first\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.sessions.create({\n id: \"ses_a\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-a\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_b\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-b\",\n createdAt: at(\"2026-05-14T10:05:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:05:00.000Z\"),\n })\n\n // Revoked sessions are excluded.\n await storage.sessions.create({\n id: \"ses_revoked\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-revoked\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n await storage.sessions.revoke({\n projectId,\n id: \"ses_revoked\",\n revokedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n // Another user's session must not leak in.\n await createUser(storage, { id: \"usr_2\", email: \"bo@acme.com\" })\n await storage.sessions.create({\n id: \"ses_other\",\n projectId,\n userId: \"usr_2\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-other\",\n createdAt: at(\"2026-05-14T10:03:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:03:00.000Z\"),\n })\n\n // ses_a is older than ses_b but has more recent activity, so it sorts first.\n await storage.sessions.touch({\n projectId,\n id: \"ses_a\",\n lastSeenAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n\n const active = await storage.sessions.listActiveByUserId({\n projectId,\n userId: \"usr_1\",\n now: at(\"2026-05-15T11:00:00.000Z\"),\n })\n expect(active.map((session) => session.id)).toEqual([\"ses_a\", \"ses_b\"])\n })\n })\n\n test(\"keeps one active invitation per normalized email\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \" Ava@Acme.COM \",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n const updated = await storage.invitations.createOrUpdateActive({\n id: \"inv_2\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"finance\"],\n updatedAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-22T10:00:00.000Z\"),\n })\n\n expect(updated.id).toBe(first.id)\n expect(updated.groupIds).toEqual([\"finance\"])\n await expect(\n storage.invitations.getActiveByEmail({\n projectId,\n email: \"ava@acme.com\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"inv_1\" })\n\n await storage.invitations.revoke({\n projectId,\n id: \"inv_1\",\n revokedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n await expect(\n storage.invitations.getActiveByEmail({\n projectId,\n email: \"ava@acme.com\",\n now: at(\"2026-05-14T10:04:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"upserts group memberships idempotently and preserves source\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"invitation\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n const repeated = await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n\n expect(repeated.source).toBe(\"invitation\")\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_1\" })\n ).resolves.toHaveLength(1)\n })\n })\n\n test(\"rejects group memberships for missing users\", async () => {\n await withStorage(async (storage) => {\n await expectAuthError(\n storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_missing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n }),\n \"missing_user\"\n )\n })\n })\n\n test(\"removes group memberships and is idempotent for missing rows\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n\n const removed = await storage.groupMemberships.remove({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n })\n expect(removed).toMatchObject({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_1\" })\n ).resolves.toHaveLength(0)\n\n // Removing an already-removed membership is a no-op that returns null.\n await expect(\n storage.groupMemberships.remove({ projectId, userId: \"usr_1\", groupId: \"commercial\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"returns null when removing a membership for a missing user\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.groupMemberships.remove({\n projectId,\n userId: \"usr_missing\",\n groupId: \"commercial\",\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"manages service accounts and their group memberships\", async () => {\n await withStorage(async (storage) => {\n const serviceAccount = await storage.serviceAccounts.create({\n id: \"svc_ingest\",\n projectId,\n name: \"Ingest worker\",\n description: \"Reads source data into Sixb.\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n expect(serviceAccount).toMatchObject({\n id: \"svc_ingest\",\n name: \"Ingest worker\",\n status: \"active\",\n })\n\n const membership = await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_ingest\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n expect(membership.groupId).toBe(\"commercial\")\n const repeated = await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_ingest\",\n groupId: \"commercial\",\n source: \"invitation\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n expect(repeated.source).toBe(\"manual\")\n\n await expect(\n storage.serviceAccountGroupMemberships.listForServiceAccount({\n projectId,\n serviceAccountId: \"svc_ingest\",\n })\n ).resolves.toHaveLength(1)\n await expect(\n storage.serviceAccountGroupMemberships.listForGroup({\n projectId,\n groupId: \"commercial\",\n })\n ).resolves.toMatchObject([{ serviceAccountId: \"svc_ingest\" }])\n\n const updated = await storage.serviceAccounts.update({\n projectId,\n id: \"svc_ingest\",\n name: \"Ingest worker v2\",\n status: \"suspended\",\n updatedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n expect(updated).toMatchObject({\n name: \"Ingest worker v2\",\n description: \"Reads source data into Sixb.\",\n status: \"suspended\",\n })\n await expect(\n storage.serviceAccounts.update({\n projectId,\n id: \"svc_ingest\",\n description: \"Imports source data into Sixb.\",\n updatedAt: at(\"2026-05-14T10:04:00.000Z\"),\n })\n ).resolves.toMatchObject({\n name: \"Ingest worker v2\",\n description: \"Imports source data into Sixb.\",\n status: \"suspended\",\n })\n await expect(\n storage.serviceAccounts.list({ projectId, statuses: [\"suspended\"] })\n ).resolves.toMatchObject({\n serviceAccounts: [{ id: \"svc_ingest\" }],\n total: 1,\n })\n })\n })\n\n test(\"rejects service account memberships for missing service accounts\", async () => {\n await withStorage(async (storage) => {\n await expectAuthError(\n storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_missing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n }),\n \"missing_service_account\"\n )\n })\n })\n\n test(\"reconciles agent-managed service account memberships\", async () => {\n await withStorage(async (storage) => {\n await storage.serviceAccounts.create({\n id: \"svc_agent_ops\",\n projectId,\n name: \"Ops agent\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupId: \"manual-extra\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupId: \"stale-agent\",\n source: \"agent\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n const first = await storage.serviceAccountGroupMemberships.reconcileForServiceAccount({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupIds: [\"agent-runtime\", \"agent-runtime\", \"ops\"],\n source: \"agent\",\n updatedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n expect(first.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"agent-runtime\", \"agent\"],\n [\"manual-extra\", \"manual\"],\n [\"ops\", \"agent\"],\n ])\n\n const second = await storage.serviceAccountGroupMemberships.reconcileForServiceAccount({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupIds: [\"ops\"],\n source: \"agent\",\n updatedAt: at(\"2026-05-14T10:04:00.000Z\"),\n })\n expect(second.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"manual-extra\", \"manual\"],\n [\"ops\", \"agent\"],\n ])\n })\n })\n\n test(\"creates, resolves, touches, lists, and revokes access tokens\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.serviceAccounts.create({\n id: \"svc_ingest\",\n projectId,\n name: \"Ingest worker\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n\n const personal = await storage.accessTokens.create({\n id: \"tok_personal\",\n projectId,\n name: \"Local CLI\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash-personal\",\n groupIds: [\"commercial\", \"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n expect(personal.groupIds).toEqual([\"commercial\", \"finance\"])\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"hash-personal\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"tok_personal\" })\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"wrong\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n const touched = await storage.accessTokens.touch({\n projectId,\n id: \"tok_personal\",\n lastUsedAt: at(\"2026-05-14T10:03:00.000Z\"),\n userAgent: \"sixb-cli/0.1\",\n ipAddress: \"203.0.113.10\",\n })\n expect(touched.lastUsedAt?.toISOString()).toBe(\"2026-05-14T10:03:00.000Z\")\n expect(touched.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n\n await storage.accessTokens.create({\n id: \"tok_service\",\n projectId,\n name: \"Sandbox agent\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"svc_ingest\",\n tokenHash: \"hash-service\",\n createdAt: at(\"2026-05-14T10:04:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:04:00.000Z\"),\n })\n await expect(\n storage.accessTokens.list({\n projectId,\n subjectType: \"serviceAccount\",\n subjectId: \"svc_ingest\",\n })\n ).resolves.toMatchObject({\n accessTokens: [{ id: \"tok_service\" }],\n total: 1,\n })\n\n await storage.accessTokens.revoke({\n projectId,\n id: \"tok_personal\",\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"hash-personal\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"round-trips the creator principal for service accounts and access tokens\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_creator\", email: \"creator@acme.com\" })\n await storage.serviceAccounts.create({\n id: \"svc_creator\",\n projectId,\n name: \"Creator service account\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_creator\",\n projectId,\n userId: \"usr_creator\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-creator\",\n createdAt: at(\"2026-05-14T10:00:30.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:30.000Z\"),\n })\n\n const principals = [\n { type: \"user\", id: \"usr_creator\" },\n { type: \"serviceAccount\", id: \"svc_creator\" },\n { type: \"system\", id: \"scheduler\" },\n ] as const\n\n for (const [index, principal] of principals.entries()) {\n const accountId = `svc_by_${principal.type}`\n const createdAccount = await storage.serviceAccounts.create({\n id: accountId,\n projectId,\n name: `Service account by ${principal.type}`,\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n createdAt: at(`2026-05-14T10:1${index}:00.000Z`),\n })\n expect(createdAccount.createdByPrincipal).toEqual(principal)\n expect(createdAccount.createdBySessionId).toBe(\"ses_creator\")\n await expect(\n storage.serviceAccounts.getById({ projectId, id: accountId })\n ).resolves.toMatchObject({\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n })\n\n const tokenId = `tok_by_${principal.type}`\n const createdToken = await storage.accessTokens.create({\n id: tokenId,\n projectId,\n name: `Token by ${principal.type}`,\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_creator\",\n tokenHash: `hash-${tokenId}`,\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n createdAt: at(`2026-05-14T10:2${index}:00.000Z`),\n expiresAt: at(`2026-05-21T10:2${index}:00.000Z`),\n })\n expect(createdToken.createdByPrincipal).toEqual(principal)\n expect(createdToken.createdBySessionId).toBe(\"ses_creator\")\n await expect(\n storage.accessTokens.getById({ projectId, id: tokenId })\n ).resolves.toMatchObject({\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n })\n }\n\n // Omitting the creator round-trips as undefined on every backend.\n const anonymous = await storage.serviceAccounts.create({\n id: \"svc_anonymous\",\n projectId,\n name: \"Anonymous service account\",\n createdAt: at(\"2026-05-14T10:30:00.000Z\"),\n })\n expect(anonymous.createdByPrincipal).toBeUndefined()\n expect(anonymous.createdBySessionId).toBeUndefined()\n await expect(\n storage.serviceAccounts.getById({ projectId, id: \"svc_anonymous\" })\n ).resolves.toMatchObject({ id: \"svc_anonymous\" })\n })\n })\n\n test(\"touch preserves prior access-token metadata when omitted\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.accessTokens.create({\n id: \"tok_touch\",\n projectId,\n name: \"Touch token\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash-touch\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n\n const first = await storage.accessTokens.touch({\n projectId,\n id: \"tok_touch\",\n lastUsedAt: at(\"2026-05-14T10:01:00.000Z\"),\n userAgent: \"sixb-cli/0.1\",\n ipAddress: \"203.0.113.10\",\n })\n expect(first.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n expect(first.lastUsedIpAddress).toBe(\"203.0.113.10\")\n\n // A later touch without metadata advances lastUsedAt but keeps the\n // previously captured user agent and IP address.\n const second = await storage.accessTokens.touch({\n projectId,\n id: \"tok_touch\",\n lastUsedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n expect(second.lastUsedAt?.toISOString()).toBe(\"2026-05-14T10:05:00.000Z\")\n expect(second.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n expect(second.lastUsedIpAddress).toBe(\"203.0.113.10\")\n await expect(\n storage.accessTokens.getById({ projectId, id: \"tok_touch\" })\n ).resolves.toMatchObject({\n lastUsedUserAgent: \"sixb-cli/0.1\",\n lastUsedIpAddress: \"203.0.113.10\",\n })\n })\n })\n\n test(\"lists access tokens with revoked, order, and pagination parity\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const ids = [\"tok_a\", \"tok_b\", \"tok_c\", \"tok_d\"]\n for (const [index, id] of ids.entries()) {\n await storage.accessTokens.create({\n id,\n projectId,\n name: `Token ${id}`,\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: `hash-${id}`,\n createdAt: at(`2026-05-14T10:0${index}:00.000Z`),\n expiresAt: at(`2026-05-21T10:0${index}:00.000Z`),\n })\n }\n await storage.accessTokens.revoke({\n projectId,\n id: \"tok_b\",\n revokedAt: at(\"2026-05-14T11:00:00.000Z\"),\n })\n\n // includeRevoked defaults to false: the revoked token is hidden.\n const active = await storage.accessTokens.list({ projectId })\n expect(active.accessTokens.map((token) => token.id)).toEqual([\"tok_a\", \"tok_c\", \"tok_d\"])\n expect(active.total).toBe(3)\n expect(active.hasMore).toBe(false)\n\n // includeRevoked: true surfaces it again, default order is ascending.\n const all = await storage.accessTokens.list({ projectId, includeRevoked: true })\n expect(all.accessTokens.map((token) => token.id)).toEqual([\n \"tok_a\",\n \"tok_b\",\n \"tok_c\",\n \"tok_d\",\n ])\n expect(all.total).toBe(4)\n\n // order: \"desc\" reverses by createdAt.\n const descending = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n order: \"desc\",\n })\n expect(descending.accessTokens.map((token) => token.id)).toEqual([\n \"tok_d\",\n \"tok_c\",\n \"tok_b\",\n \"tok_a\",\n ])\n\n // First page reports hasMore at the page boundary.\n const firstPage = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 2,\n })\n expect(firstPage.accessTokens.map((token) => token.id)).toEqual([\"tok_a\", \"tok_b\"])\n expect(firstPage.total).toBe(4)\n expect(firstPage.hasMore).toBe(true)\n\n // Second page exhausts the result set.\n const secondPage = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 2,\n offset: 2,\n })\n expect(secondPage.accessTokens.map((token) => token.id)).toEqual([\"tok_c\", \"tok_d\"])\n expect(secondPage.hasMore).toBe(false)\n\n // A page that exactly consumes the remainder reports no more.\n const exactBoundary = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 4,\n })\n expect(exactBoundary.accessTokens.map((token) => token.id)).toEqual(ids)\n expect(exactBoundary.hasMore).toBe(false)\n })\n })\n\n test(\"lists service accounts with pagination parity\", async () => {\n await withStorage(async (storage) => {\n const ids = [\"svc_a\", \"svc_b\", \"svc_c\"]\n for (const [index, id] of ids.entries()) {\n await storage.serviceAccounts.create({\n id,\n projectId,\n name: `Service account ${id}`,\n createdAt: at(`2026-05-14T10:0${index}:00.000Z`),\n })\n }\n\n // Default order is ascending by createdAt across every backend.\n const all = await storage.serviceAccounts.list({ projectId })\n expect(all.serviceAccounts.map((account) => account.id)).toEqual(ids)\n expect(all.total).toBe(3)\n expect(all.hasMore).toBe(false)\n\n const firstPage = await storage.serviceAccounts.list({ projectId, limit: 2 })\n expect(firstPage.serviceAccounts.map((account) => account.id)).toEqual([\"svc_a\", \"svc_b\"])\n expect(firstPage.total).toBe(3)\n expect(firstPage.hasMore).toBe(true)\n\n const secondPage = await storage.serviceAccounts.list({\n projectId,\n limit: 2,\n offset: 2,\n })\n expect(secondPage.serviceAccounts.map((account) => account.id)).toEqual([\"svc_c\"])\n expect(secondPage.hasMore).toBe(false)\n })\n })\n\n test(\"rejects invalid access token subjects\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await expectAuthError(\n storage.accessTokens.create({\n id: \"tok_bad_kind\",\n projectId,\n name: \"Bad kind\",\n kind: \"serviceAccount\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n }),\n \"invalid_input\"\n )\n await expectAuthError(\n storage.accessTokens.create({\n id: \"tok_missing_subject\",\n projectId,\n name: \"Missing subject\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"svc_missing\",\n tokenHash: \"hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n }),\n \"missing_service_account\"\n )\n })\n })\n\n test(\"creates one active magic link per email and consumes it once\", async () => {\n await withStorage(async (storage) => {\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:15:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_2\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \" ava@acme.com \",\n tokenHash: \"hash-2\",\n returnTo: \"/dashboard\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n revokedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await expectAuthError(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"wrong\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n }),\n \"invalid_magic_link\"\n )\n\n await expect(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"hash-2\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n audience: \"atlas\",\n returnTo: \"/dashboard\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n await expectAuthError(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"hash-2\",\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n }),\n \"invalid_magic_link\"\n )\n })\n })\n\n test(\"stores OIDC attempts with one-time state consumption\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n returnTo: \"/objects\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"wrong\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n }),\n \"invalid_oidc_attempt\"\n )\n await expect(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"state-hash\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n ).resolves.toMatchObject({\n audience: \"atlas\",\n codeVerifier: \"verifier\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await expectAuthError(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"state-hash\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n }),\n \"invalid_oidc_attempt\"\n )\n })\n })\n\n test(\"completes magic-link sign-in for an existing user\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_old\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"old-hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_new\", \"session-hash\", \"atlas\", at(\"2026-06-21T10:10:00.000Z\")),\n })\n\n expect(result.user.id).toBe(\"usr_1\")\n expect(result.session).toMatchObject({\n id: \"ses_new\",\n strategyId: \"magic-link\",\n tokenHash: \"session-hash\",\n absoluteExpiresAt: at(\"2026-06-21T10:10:00.000Z\"),\n })\n // Signing in again keeps the user's existing session active; concurrent\n // sessions are allowed.\n const oldSession = await storage.sessions.getById({ projectId, id: \"ses_old\" })\n expect(oldSession?.revokedAt).toBeUndefined()\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_unused_2\",\n session: sessionInput(\"ses_replay\"),\n }),\n \"invalid_magic_link\"\n )\n })\n })\n\n test(\"creates invited users through magic-link completion and applies groups once\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:17:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_new\",\n manualGroupIds: [\"security-admins\"],\n session: sessionInput(\"ses_new\"),\n })\n\n expect(result.invitation).toMatchObject({\n id: \"inv_1\",\n status: \"accepted\",\n })\n const memberships = await storage.groupMemberships.listForUser({\n projectId,\n userId: \"usr_new\",\n })\n expect(memberships.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"commercial\", \"invitation\"],\n [\"finance\", \"invitation\"],\n [\"security-admins\", \"manual\"],\n ])\n })\n })\n\n test(\"preserves existing membership source when accepting an invitation\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_existing\", email: \"ava@acme.com\" })\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_existing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:17:00.000Z\"),\n })\n\n await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_existing\"),\n })\n\n const memberships = await storage.groupMemberships.listForUser({\n projectId,\n userId: \"usr_existing\",\n })\n expect(memberships.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"commercial\", \"manual\"],\n [\"finance\", \"invitation\"],\n ])\n })\n })\n\n test(\"does not create missing users when invitation eligibility disappeared\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n await storage.invitations.revoke({\n projectId,\n id: \"inv_1\",\n revokedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_new\",\n session: sessionInput(\"ses_new\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"ava@acme.com\" })\n ).resolves.toBeNull()\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n })\n })\n\n test(\"allows explicit bootstrap creation through magic-link completion\", async () => {\n await withStorage(async (storage) => {\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"founder@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_founder\",\n allowUserCreationWithoutInvitation: true,\n manualGroupIds: [\"security-admins\"],\n session: sessionInput(\"ses_founder\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_founder\",\n email: \"founder@acme.com\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_founder\" })\n ).resolves.toMatchObject([{ groupId: \"security-admins\", source: \"manual\" }])\n })\n })\n\n test(\"closes bootstrap user creation when an active user already exists\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, {\n id: \"usr_existing\",\n email: \"existing@acme.com\",\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"founder@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_founder\",\n allowUserCreationWithoutInvitation: true,\n requireNoActiveUsersForUserCreation: true,\n session: sessionInput(\"ses_founder\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"founder@acme.com\" })\n ).resolves.toBeNull()\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n })\n })\n\n test(\"does not apply the bootstrap closure guard to invited user creation\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, {\n id: \"usr_existing\",\n email: \"existing@acme.com\",\n })\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"invited@acme.com\",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"invited@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_invited\",\n requireNoActiveUsersForUserCreation: true,\n session: sessionInput(\"ses_invited\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_invited\",\n email: \"invited@acme.com\",\n })\n expect(result.invitation).toMatchObject({\n id: \"inv_1\",\n status: \"accepted\",\n })\n })\n })\n\n test(\"consumes valid magic links when an existing user is suspended\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { status: \"suspended\" })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_new\"),\n }),\n \"suspended_user\"\n )\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n })\n })\n\n test(\"completes OIDC sign-in through an existing identity\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_oidc\", email: \"ava@acme.com\" })\n await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava@acme.com\" },\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:11:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n subject: \"00u1\",\n email: \"renamed@acme.com\",\n emailVerified: true,\n claims: { email: \"renamed@acme.com\" },\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_oidc\"),\n })\n\n expect(result.identity).toMatchObject({\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"renamed@acme.com\" },\n })\n await expect(storage.users.getById({ projectId, id: \"usr_oidc\" })).resolves.toMatchObject({\n email: \"ava@acme.com\",\n })\n })\n })\n\n test(\"auto-links OIDC by verified email only when explicitly allowed\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_existing\", email: \"ava@acme.com\" })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_blocked\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"blocked-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_blocked\",\n stateHash: \"blocked-state\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: false,\n autoLinkByVerifiedEmail: true,\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_blocked\"),\n }),\n \"email_link_not_allowed\"\n )\n\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_allowed\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"allowed-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:12:00.000Z\"),\n })\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_allowed\",\n stateHash: \"allowed-state\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: true,\n autoLinkByVerifiedEmail: true,\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_allowed\"),\n })\n\n expect(result.user.id).toBe(\"usr_existing\")\n expect(result.identity).toMatchObject({\n userId: \"usr_existing\",\n })\n })\n })\n\n test(\"creates new OIDC users through active invitations and applies groups\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_oidc\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T09:59:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n displayName: \"Ava Chen\",\n emailVerified: true,\n newUserId: \"usr_oidc\",\n session: sessionInput(\"ses_oidc\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_oidc\",\n email: \"ava@acme.com\",\n displayName: \"Ava Chen\",\n })\n expect(result.invitation).toMatchObject({\n id: \"inv_oidc\",\n status: \"accepted\",\n })\n expect(result.identity).toMatchObject({\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_oidc\" })\n ).resolves.toMatchObject([{ groupId: \"commercial\", source: \"invitation\" }])\n })\n })\n\n test(\"does not create new OIDC users without invitation or bootstrap eligibility\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: true,\n newUserId: \"usr_oidc\",\n session: sessionInput(\"ses_oidc\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"ava@acme.com\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"allows first OIDC bootstrap user creation with manual groups\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_bootstrap\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"bootstrap-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_bootstrap\",\n stateHash: \"bootstrap-state\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"founder@acme.com\",\n emailVerified: true,\n allowUserCreationWithoutInvitation: true,\n requireNoActiveUsersForUserCreation: true,\n manualGroupIds: [\"security-admins\"],\n newUserId: \"usr_founder\",\n session: sessionInput(\"ses_oidc_bootstrap\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_founder\",\n email: \"founder@acme.com\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_founder\" })\n ).resolves.toMatchObject([{ groupId: \"security-admins\", source: \"manual\" }])\n })\n })\n\n test(\"suspends users and revokes active sessions immediately\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_1\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_app\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-app\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n\n const suspended = await storage.suspendUserAndRevokeSessions({\n projectId,\n userId: \"usr_1\",\n suspendedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n\n expect(suspended.status).toBe(\"suspended\")\n await expect(storage.sessions.getById({ projectId, id: \"ses_1\" })).resolves.toMatchObject({\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n await expect(storage.sessions.getById({ projectId, id: \"ses_app\" })).resolves.toMatchObject(\n {\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n }\n )\n })\n })\n })\n}\n",
|
|
11
11
|
"import { describe, expect, test } from \"bun:test\"\nimport { blobIdFromDigest, computeBlobDigest } from \"../blob-storage\"\nimport type { BlobStorage } from \"../blob-storage/types\"\n\nexport interface BlobStorageContractSuiteOptions<TStorage extends BlobStorage = BlobStorage> {\n /** Factory that produces an isolated storage instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\n/** Runs the shared content, streaming, size-validation, and cancellation contract. */\nexport function runBlobStorageContractSuite<TStorage extends BlobStorage>(\n label: string,\n options: BlobStorageContractSuiteOptions<TStorage>\n): void {\n const encoder = new TextEncoder()\n\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"streams bodies into stable content-addressed references\", async () => {\n await withStorage(async (storage) => {\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(encoder.encode(\"streamed \"))\n controller.enqueue(encoder.encode(\"body\"))\n controller.close()\n },\n })\n\n const fileRef = await storage.put({\n body,\n expectedSizeBytes: 13,\n fileName: \"report.bin\",\n mediaType: \"application/octet-stream\",\n logicalPath: \"reports/report.bin\",\n })\n\n expect(fileRef.sizeBytes).toBe(13)\n expect(fileRef.blobId).toBe(blobIdFromDigest(fileRef.digest))\n expect(fileRef.fileName).toBe(\"report.bin\")\n expect(fileRef.mediaType).toBe(\"application/octet-stream\")\n expect(fileRef.logicalPath).toBe(\"reports/report.bin\")\n expect(await new Response(await storage.open(fileRef.blobId)).text()).toBe(\"streamed body\")\n })\n })\n\n test(\"rejects an expected size mismatch without publishing a blob\", async () => {\n await withStorage(async (storage) => {\n const bytes = encoder.encode(\"wrong size\")\n const blobId = blobIdFromDigest(computeBlobDigest(bytes))\n\n await expect(\n storage.put({ body: bytes, expectedSizeBytes: bytes.byteLength + 1 })\n ).rejects.toThrow(\n `Blob size mismatch: expected ${bytes.byteLength + 1} bytes, received ${bytes.byteLength}.`\n )\n await expect(storage.stat(blobId)).resolves.toBeNull()\n })\n })\n\n test(\"rejects invalid expected sizes\", async () => {\n await withStorage(async (storage) => {\n const body = new ReadableStream<Uint8Array>({\n pull(controller) {\n controller.close()\n },\n })\n\n await expect(storage.put({ body, expectedSizeBytes: -1 })).rejects.toThrow(\n \"expectedSizeBytes must be a non-negative safe integer\"\n )\n })\n })\n\n test(\"cancels an active body without publishing partial bytes\", async () => {\n await withStorage(async (storage) => {\n const abort = new AbortController()\n let bodyCancelled = false\n const firstChunk = encoder.encode(\"partial\")\n const blobId = blobIdFromDigest(computeBlobDigest(firstChunk))\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(firstChunk)\n },\n cancel() {\n bodyCancelled = true\n },\n })\n\n const put = storage.put({ body, signal: abort.signal })\n abort.abort(new Error(\"cancel blob put\"))\n\n await expect(put).rejects.toThrow(\"cancel blob put\")\n expect(bodyCancelled).toBe(true)\n await expect(storage.stat(blobId)).resolves.toBeNull()\n })\n })\n })\n}\n",
|
|
12
12
|
"import { describe, expect, test } from \"bun:test\"\nimport { BrokerError } from \"../broker/errors\"\nimport type {\n Broker,\n BrokerRecord,\n BrokerRecordInput,\n BrokerStreamDefinition,\n} from \"../broker/types\"\nimport type { JsonValue } from \"../json\"\n\nexport interface BrokerContractSuiteOptions<TBroker extends Broker = Broker> {\n /** Factory that produces a fresh `Broker` instance for each test case. */\n readonly createBroker: () => TBroker | Promise<TBroker>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (broker: TBroker) => void | Promise<void>\n /**\n * Retention age used by the maxAgeMs assertion. Defaults to 20ms.\n * Providers with coarse server-side retention can increase this in their own suite.\n */\n readonly maxAgeMs?: number\n /**\n * Time to wait for maxAgeMs retention to expire. Defaults to `maxAgeMs + 20`.\n */\n readonly maxAgeWaitMs?: number\n /**\n * Time to wait after registering a live subscription before appending records.\n * Defaults to 0 for synchronous providers.\n */\n readonly subscriptionSetupMs?: number\n /**\n * Time to wait for asynchronous subscription delivery. Defaults to 200ms.\n */\n readonly subscriptionDeliveryTimeoutMs?: number\n /**\n * Poll interval while waiting for asynchronous subscription delivery. Defaults to 10ms.\n */\n readonly subscriptionPollIntervalMs?: number\n}\n\nconst eventsStream: BrokerStreamDefinition = { id: \"__events\" }\nconst retainedStream: BrokerStreamDefinition = { id: \"__retained\", retention: { maxRecords: 2 } }\n\n/**\n * Runs the shared `Broker` contract against any provider.\n *\n * The contract intentionally stays small: append records, read retained records\n * by exclusive cursor, subscribe to retained/live streams, and apply portable\n * retention. Provider-specific administration and durable consumer identity\n * are outside the V1 broker surface.\n */\nexport function runBrokerContractSuite<TBroker extends Broker>(\n label: string,\n options: BrokerContractSuiteOptions<TBroker>\n): void {\n const maxAgeMs = options.maxAgeMs ?? 20\n const maxAgeWaitMs = options.maxAgeWaitMs ?? maxAgeMs + 20\n const subscriptionSetupMs = options.subscriptionSetupMs ?? 0\n const subscriptionDeliveryTimeoutMs = options.subscriptionDeliveryTimeoutMs ?? 200\n const subscriptionPollIntervalMs = options.subscriptionPollIntervalMs ?? 10\n\n const withBroker = async (body: (broker: TBroker) => Promise<void>): Promise<void> => {\n const broker = await options.createBroker()\n try {\n await body(broker)\n } finally {\n await options.teardown?.(broker)\n }\n }\n\n describe(label, () => {\n describe(\"append\", () => {\n test(\"returns stored records with cursors and timestamps\", async () => {\n await withBroker(async (broker) => {\n const before = Date.now()\n\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n },\n ],\n })\n\n expect(records).toHaveLength(1)\n expect(records[0]).toMatchObject({\n streamId: eventsStream.id,\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n })\n expect(records[0]?.cursor).toBeTruthy()\n expect(Date.parse(records[0]!.publishedAt)).toBeGreaterThanOrEqual(before)\n })\n })\n\n test(\"snapshots appended payloads\", async () => {\n await withBroker(async (broker) => {\n const payload = { nested: { value: \"before\" } }\n\n const [record] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload }],\n })\n payload.nested.value = \"after\"\n\n expect(record?.payload).toEqual({ nested: { value: \"before\" } })\n const [readBack] = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n })\n expect(readBack?.payload).toEqual({ nested: { value: \"before\" } })\n })\n })\n\n test(\"returns empty array for empty appends\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [],\n })\n\n expect(records).toEqual([])\n })\n })\n\n test(\"rejects empty projectId and stream id\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \" \",\n stream: eventsStream,\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \" \" },\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"rejects payloads that are not JSON values\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n payload: {\n observedAt: new Date(\"2026-01-01T00:00:00.000Z\"),\n } as unknown as JsonValue,\n },\n ],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: { value: Number.NaN } as unknown as JsonValue }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"requires streams to be ensured before appending records\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.append({\n projectId: \"project-a\",\n streamId: \"missing\",\n records: [{ payload: \"one\" }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n })\n\n describe(\"read\", () => {\n test(\"reads records after an exclusive cursor\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: { value: 1 } },\n { name: \"two\", payload: { value: 2 } },\n { name: \"three\", payload: { value: 3 } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n })\n\n expect(records.map((record) => record.name)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"limits matching records after applying name filters\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", payload: { id: \"room-1\" } },\n { name: \"telemetry.appended\", payload: { id: \"temp-1\" } },\n { name: \"test.record\", payload: { id: \"room-2\" } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n names: [\"test.record\"],\n limit: 2,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\n { id: \"room-1\" },\n { id: \"room-2\" },\n ])\n })\n })\n\n test(\"returns empty array for missing streams and non-positive limits\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"test.record\", payload: { id: \"room-1\" } }],\n })\n\n expect(\n await broker.read({\n projectId: \"project-a\",\n streamId: \"missing\",\n })\n ).toEqual({ records: [], cursor: undefined, hasMore: false })\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: 0 })\n ).toEqual([])\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: -1 })\n ).toEqual([])\n })\n })\n\n test(\"isolates projects and streams\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"a\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-b\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"b\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-b\" },\n records: [{ payload: { value: \"c\" } }],\n })\n\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"a\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-b\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"b\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-b\" } })\n )\n ).toEqual([{ value: \"c\" }])\n })\n })\n\n test(\"advances the page cursor when filters match no records\", async () => {\n await withBroker(async (broker) => {\n const appended = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: 1 },\n { name: \"two\", payload: 2 },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n names: [\"missing\"],\n limit: 1,\n })\n\n expect(page.records).toEqual([])\n expect(page.cursor).toBe(appended.at(-1)?.cursor)\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"filters by record key before applying the page limit\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"sync:a\", payload: \"a1\" },\n { key: \"sync:b\", payload: \"b\" },\n { key: \"sync:a\", payload: \"a2\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"sync:a\"],\n limit: 2,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"a1\", \"a2\"])\n })\n })\n\n test(\"reports no forward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"target\", payload: \"match\" },\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"reports no backward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n { key: \"target\", payload: \"match\" },\n ],\n })\n\n const page = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"tails recent records and paginates toward older history\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [1, 2, 3, 4, 5].map((payload) => ({ payload })),\n })\n\n const recent = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n limit: 2,\n })\n expect(recent.records.map((record) => record.payload)).toEqual([4, 5])\n expect(recent.hasMore).toBe(true)\n\n const older = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n beforeCursor: recent.cursor,\n limit: 2,\n })\n expect(older.records.map((record) => record.payload)).toEqual([2, 3])\n expect(older.hasMore).toBe(true)\n })\n })\n })\n\n describe(\"latestCursor\", () => {\n test(\"returns undefined for missing and empty streams\", async () => {\n await withBroker(async (broker) => {\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: \"missing\" })\n ).toBeUndefined()\n\n await broker.ensureStream({ projectId: \"project-a\", stream: eventsStream })\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: eventsStream.id })\n ).toBeUndefined()\n })\n })\n\n test(\"returns the newest retained record cursor\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: retainedStream.id })\n ).toBe(records.at(-1)?.cursor)\n })\n })\n })\n\n describe(\"subscribe\", () => {\n test(\"requires streams to be ensured before subscribing\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.subscribe({ projectId: \"project-a\", streamId: \"missing\" }, () => {})\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"defaults to latest and receives only new records\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"before\", payload: { value: \"before\" } }],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"after\", payload: \"after\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the appended record\",\n })\n expect(received).toEqual([\"after\"])\n })\n })\n\n test(\"can subscribe from earliest retained record\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: \"one\" },\n { name: \"two\", payload: \"two\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream, from: \"earliest\" },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"three\", payload: \"three\" }],\n })\n\n await waitUntil(() => received.length === 3, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive retained plus live records\",\n })\n expect(received).toEqual([\"one\", \"two\", \"three\"])\n })\n })\n\n test(\"can subscribe after a cursor and filter by name and key\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", key: \"other\", payload: \"one\" },\n { name: \"telemetry.appended\", key: \"target\", payload: \"two\" },\n { name: \"test.record\", key: \"target\", payload: \"three\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n names: [\"test.record\"],\n keys: [\"target\"],\n },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not replay matching records after cursor\",\n })\n expect(received).toEqual([\"three\"])\n })\n })\n\n test(\"unsubscribe stops delivery\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n const unsubscribe = await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the first record before unsubscribe\",\n })\n\n unsubscribe()\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"two\" }],\n })\n await Bun.sleep(Math.min(250, subscriptionDeliveryTimeoutMs))\n\n expect(received).toEqual([\"one\"])\n })\n })\n\n test(\"swallows handler errors\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n await subscribeRecords(broker, { projectId: \"project-a\", stream: eventsStream }, () => {\n throw new Error(\"subscriber failed\")\n })\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n ).resolves.toHaveLength(1)\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription delivery stopped after another handler threw\",\n })\n expect(received).toEqual([\"one\"])\n })\n })\n })\n\n describe(\"retention\", () => {\n test(\"bounds retained history by bytes\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__byte_retained\", retention: { maxBytes: 1_024 } }\n await broker.ensureStream({ projectId: \"project-a\", stream })\n\n await broker.append({\n projectId: \"project-a\",\n streamId: stream.id,\n records: [\"one\", \"two\", \"three\"].map((label) => ({\n name: label,\n payload: { label, body: \"x\".repeat(600) },\n })),\n })\n\n const records = await broker.read({\n projectId: \"project-a\",\n streamId: stream.id,\n })\n expect(records.records.length).toBeGreaterThan(0)\n expect(records.records.length).toBeLessThan(3)\n expect(records.records.at(-1)?.name).toBe(\"three\")\n })\n })\n\n test(\"retains only the latest maxRecords\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"rejects resuming from a cursor that predates the retained range\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [\n { payload: \"one\" },\n { payload: \"two\" },\n { payload: \"three\" },\n { payload: \"four\" },\n ],\n })\n\n await expect(\n readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n afterCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n broker.tail({\n projectId: \"project-a\",\n streamId: retainedStream.id,\n beforeCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n // A resuming subscriber must be told the gap exists rather than silently fast-forwarded\n // to the oldest retained record, which would look like a complete stream. To prove this\n // still guards, drop the `assertCursorInRetainedRange` call from `subscribe` in\n // `broker/in-memory.ts` (or from `nats-broker.ts`) and only this expectation fails.\n await expect(\n broker.subscribe(\n {\n projectId: \"project-a\",\n streamId: retainedStream.id,\n afterCursor: first?.cursor,\n },\n () => undefined\n )\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"retains only records within maxAgeMs\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__age_retained\", retention: { maxAgeMs } }\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"old\" }],\n })\n\n await Bun.sleep(maxAgeWaitMs)\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"new\" }],\n })\n\n const records = await readRecords(broker, { projectId: \"project-a\", stream })\n\n expect(records.map((record) => record.payload)).toEqual([\"new\"])\n })\n })\n })\n })\n}\n\nasync function payloads(records: Promise<readonly BrokerRecord[]>): Promise<readonly unknown[]> {\n return (await records).map((record) => record.payload)\n}\n\nasync function appendRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n records: readonly BrokerRecordInput[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.append({\n projectId: params.projectId,\n streamId: params.stream.id,\n records: params.records,\n })\n}\n\nasync function readRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return (\n await broker.read({\n projectId: params.projectId,\n streamId: params.stream.id,\n afterCursor: params.afterCursor,\n limit: params.limit,\n names: params.names,\n keys: params.keys,\n })\n ).records\n}\n\nasync function subscribeRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n from?: \"latest\" | \"earliest\"\n afterCursor?: string\n names?: readonly string[]\n keys?: readonly string[]\n },\n handler: (records: readonly BrokerRecord[]) => void\n): Promise<() => void> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.subscribe(\n {\n projectId: params.projectId,\n streamId: params.stream.id,\n from: params.from,\n afterCursor: params.afterCursor,\n names: params.names,\n keys: params.keys,\n },\n handler\n )\n}\n\nasync function waitUntil(\n predicate: () => boolean,\n options: { timeoutMs: number; intervalMs: number; message: string }\n): Promise<void> {\n const deadline = Date.now() + options.timeoutMs\n while (Date.now() < deadline) {\n if (predicate()) {\n return\n }\n await Bun.sleep(options.intervalMs)\n }\n throw new Error(`${options.message} within ${options.timeoutMs}ms`)\n}\n",
|
|
13
13
|
"import { describe, expect, test } from \"bun:test\"\nimport type {\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationKind,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorConnectionRunInput,\n} from \"../storage/connector-connections\"\nimport type { CreateExecutionInput } from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\n\nexport type ConnectorConnectionStorageContractStorage = Storage & {\n readonly connectorConnections: ConnectorConnectionStorage\n}\n\nexport interface ConnectorConnectionStorageContractSuiteOptions<\n TStorage extends\n ConnectorConnectionStorageContractStorage = ConnectorConnectionStorageContractStorage,\n> {\n /** Factory that produces one isolated complete storage provider for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Advances the storage-authoritative clock without relying on wall-clock sleeps. */\n readonly advanceTime: (storage: TStorage, durationMs: number) => void | Promise<void>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst connectorId = \"social\"\nconst credentials = {\n version: 1,\n algorithm: \"A256GCM\",\n nonce: \"nonce\",\n ciphertext: \"ciphertext\",\n tag: \"tag\",\n} as const\n\n/** Runs the atomicity, fencing, slot uniqueness and project-isolation storage contract. */\nexport function runConnectorConnectionStorageContractSuite<\n TStorage extends ConnectorConnectionStorageContractStorage,\n>(label: string, options: ConnectorConnectionStorageContractSuiteOptions<TStorage>): void {\n const withStorage = async (\n body: (connections: TStorage[\"connectorConnections\"], storage: TStorage) => Promise<void>\n ): Promise<void> => {\n const root = await options.createStorage()\n try {\n await body(root.connectorConnections, root)\n } finally {\n await options.teardown?.(root)\n }\n }\n\n describe(label, () => {\n test(\"binds one-use authorization attempts to their initiating execution\", async () => {\n await withStorage(async (storage) => {\n const attempt = authorizationAttempt()\n await expect(storage.createAuthorizationAttempt(attempt)).resolves.toMatchObject({\n id: attempt.id,\n projectId,\n connectorId,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n\n for (const mismatchedScope of [\n { projectId: \"project-b\" },\n { connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.consumeAuthorizationAttempt({\n ...authorizationAttemptConsumption(),\n ...mismatchedScope,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n }\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).resolves.toMatchObject({\n id: attempt.id,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"expires authorization attempts from the authoritative storage clock\", async () => {\n await withStorage(async (storage, root) => {\n const ttlMs = 60_000\n const attempt = await storage.createAuthorizationAttempt(authorizationAttempt({ ttlMs }))\n expect(attempt.expiresAt.getTime() - attempt.createdAt.getTime()).toBe(ttlMs)\n\n await options.advanceTime(root, ttlMs)\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"returns detached authorization attempt records\", async () => {\n await withStorage(async (storage) => {\n const created = await storage.createAuthorizationAttempt(authorizationAttempt())\n Object.assign(created.codeVerifier, { ciphertext: \"mutated\" })\n\n const consumed = await storage.consumeAuthorizationAttempt(\n authorizationAttemptConsumption()\n )\n expect(consumed.codeVerifier.ciphertext).toBe(credentials.ciphertext)\n })\n })\n\n test(\"commits and rolls back connection runs with their attempt and execution\", async () => {\n await withStorage(async (storage, root) => {\n const committedExecution = requestExecution(\"execution-commit\")\n const committedAttempt = authorizationAttempt({\n id: \"attempt-commit\",\n initiatedByExecutionId: committedExecution.id,\n connectionRunId: \"run-commit\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-commit\",\n })\n const committedRun = connectionRun({\n id: \"run-commit\",\n initiatedByExecutionId: committedExecution.id,\n })\n await root.transaction(\n async (tx) => {\n await tx.executions.create(committedExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(committedRun)\n await connections.createAuthorizationAttempt(committedAttempt)\n },\n { isolation: \"serializable\" }\n )\n\n expect(\n await root.executions.getById({ projectId, id: committedExecution.id })\n ).not.toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: committedRun.id })\n ).resolves.toMatchObject({ id: committedRun.id })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(committedAttempt.id))\n ).resolves.toMatchObject({ id: committedAttempt.id })\n\n const rolledBackExecution = requestExecution(\"execution-rollback\")\n const rolledBackAttempt = authorizationAttempt({\n id: \"attempt-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n connectionRunId: \"run-rollback\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-rollback\",\n })\n const rolledBackRun = connectionRun({\n id: \"run-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n })\n const rollback = new Error(\"rollback connector authorization attempt\")\n await expect(\n root.transaction(\n async (tx) => {\n await tx.executions.create(rolledBackExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(rolledBackRun)\n await connections.createAuthorizationAttempt(rolledBackAttempt)\n throw rollback\n },\n { isolation: \"serializable\" }\n )\n ).rejects.toBe(rollback)\n\n expect(await root.executions.getById({ projectId, id: rolledBackExecution.id })).toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: rolledBackRun.id })\n ).resolves.toBeNull()\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(rolledBackAttempt.id))\n ).rejects.toThrow(\"invalid, expired, or already used\")\n })\n })\n\n test(\"links at most one headless attempt to an awaiting provider run\", async () => {\n await withStorage(async (storage) => {\n const headlessAttempt = {\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n } as const\n\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).rejects.toThrow(\"does not match its connection run\")\n\n await storage.createConnectionRun(connectionRun())\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).resolves.toMatchObject({ id: \"attempt-a\", connectionRunId: \"run-a\" })\n await expect(\n storage.createAuthorizationAttempt(\n authorizationAttempt({ ...headlessAttempt, id: \"attempt-b\" })\n )\n ).rejects.toThrow(\"does not match its connection run\")\n })\n })\n\n test(\"claims a headless callback once with state and browser binding\", async () => {\n await withStorage(async (storage) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"wrong-binding\",\n })\n )\n ).resolves.toBeNull()\n\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n expect(claimed).toMatchObject({\n type: \"claimed\",\n run: { id: \"run-a\", status: \"running\" },\n attempt: { id: \"attempt-a\", connectionRunId: \"run-a\" },\n returnTo: \"https://app.example.com/connectors\",\n })\n expect(claimed && \"returnTo\" in claimed.run).toBe(false)\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"expires a waiting run and removes its protocol attempt lazily\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"fails an expired processing run and fences its late result\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({ processingTtlMs: 1_000 })\n )\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await expect(\n storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n ).resolves.not.toBeNull()\n\n await options.advanceTime(root, 1_000)\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({\n status: \"failed\",\n authorizationId: authorization.id,\n error: { code: \"internal.unexpected\" },\n })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n await expect(\n storage.finishConnectionRun({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n status: \"cancelled\",\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"keeps account selection atomic with its connection run\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await connect(storage, active, \"connection-a\", \"account-a\")\n const pending = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n await createSelectionRun(storage, pending)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: false,\n })\n ).rejects.toThrow(\"explicit replacement is required\")\n expect(\n await storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).toMatchObject({ status: \"waiting\", waitingFor: \"account_selection\" })\n expect(await storage.getAuthorization(authorizationKey(pending.id))).toEqual(pending)\n\n const selected = await storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: true,\n })\n expect(selected.run).toMatchObject({ status: \"succeeded\" })\n })\n })\n\n test(\"keeps one stable connection per project connector slot\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const firstConnection = await connect(storage, first, \"connection-a\", \"account-a\")\n const second = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, second, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n const replaced = await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: second.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: \"account-b\", label: \"ignored\" },\n replace: true,\n })\n expect(replaced.connection.id).toBe(firstConnection.connection.id)\n expect(replaced.revocationPendingAuthorizationId).toBe(first.id)\n expect(await storage.getAuthorization(authorizationKey(first.id))).toMatchObject({\n status: \"revocation_pending\",\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toMatchObject({ authorizationId: second.id, account: { id: \"account-b\" } })\n })\n })\n\n test(\"retains disconnected identities and reactivates the same slot id\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, first, \"connection-a\", \"account-a\")\n\n const disconnected = await storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n expect(disconnected).toMatchObject({\n connection: { id: connected.connection.id, status: \"disconnected\" },\n authorization: { status: \"revocation_pending\" },\n revocationPendingAuthorizationId: first.id,\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n ).toMatchObject({ status: \"disconnected\" })\n\n const second = await createAuthorization(storage, \"authorization-b\", \"account-a\")\n const reconnected = await connect(storage, second, \"ignored-new-id\", \"account-a\")\n expect(reconnected.connection).toMatchObject({\n id: connected.connection.id,\n authorizationId: second.id,\n status: \"connected\",\n })\n })\n })\n\n test(\"keeps pending selection untouched when connection validation fails\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const existing = await connect(storage, active, \"connection-a\", \"account-a\")\n const replacement = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, replacement, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n expect(await storage.getAuthorization(authorizationKey(replacement.id))).toEqual(\n replacement\n )\n\n const duplicateId = await createAuthorization(storage, \"authorization-c\", \"account-c\")\n await expect(\n storage.putConnection({\n id: existing.connection.id,\n projectId,\n connectorId,\n authorizationId: duplicateId.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-c\", label: \"ignored\" },\n replace: false,\n })\n ).rejects.toThrow(\"connection id already exists\")\n expect(await storage.getAuthorization(authorizationKey(duplicateId.id))).toEqual(\n duplicateId\n )\n })\n })\n\n test(\"commits expiry cleanup before rejecting account selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await options.advanceTime(root, 60_000)\n\n await expect(connect(storage, authorization, \"connection-a\", \"account-a\")).rejects.toThrow(\n \"selectable authorization\"\n )\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"commits lazy run expiry before rejecting a late selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await createSelectionRun(storage, authorization)\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-a\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-a\", label: \"Account A\" },\n replace: false,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"scopes direct record reads by project and connector\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, authorization, \"connection-a\", \"account-a\")\n\n expect(await storage.getAuthorization(authorizationKey(authorization.id))).toEqual(\n connected.authorization\n )\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n expect(\n await storage.getAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n ...scope,\n connectionId: connected.connection.id,\n })\n ).toBeNull()\n expect(\n await storage.listConnectionsByAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toEqual([])\n }\n })\n })\n\n test(\"fences staged credentials by project, revision and mutation id\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.claimCredentialMutation({\n ...scope,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n ).resolves.toBeNull()\n }\n\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n const claimed = claim!.authorization\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(claimed),\n holderId: \"worker-a\",\n })\n expect(executing?.credentialMutation?.phase).toBe(\"executing\")\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n ...scope,\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n }\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n mutationId: \"stale-mutation\",\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n await expect(\n storage.finalizeRefresh({ ...fence(claimed), expectedRevision: claimed.revision + 1 })\n ).resolves.toBeNull()\n await expect(storage.finalizeRefresh(fence(claimed))).resolves.toMatchObject({\n revision: claimed.revision + 1,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"releases an expired prepared mutation without changing credential state\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n await claimMutation(storage, authorization, \"mutation-prepared\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"fails closed expired executing credential changes but keeps revocation retryable\", async () => {\n for (const kind of [\"refresh\", \"reauthorization\"] as const) {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, `mutation-${kind}`, kind, {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n revision: claim.authorization.revision + 1,\n credentialMutation: undefined,\n })\n })\n }\n\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(\n storage,\n authorization,\n \"mutation-revocation\",\n \"revocation\",\n { leaseDurationMs: 10_000, operationTimeoutMs: 60_000 }\n )\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered).toMatchObject({\n status: \"revocation_pending\",\n revision: claim.authorization.revision,\n credentialMutation: undefined,\n })\n if (!recovered) throw new Error(\"Expected expired revocation recovery.\")\n await expect(\n claimMutation(storage, recovered, \"mutation-revocation-retry\", \"revocation\")\n ).resolves.toBeDefined()\n })\n })\n\n test(\"preserves a staged provider result after its lease and deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-staged\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 20_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(executing),\n holderId: \"worker-a\",\n credentials: { ...credentials, ciphertext: \"refreshed\" },\n scopes: [\"accounts.read\"],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n\n await options.advanceTime(root, 20_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered?.credentialMutation?.phase).toBe(\"result_staged\")\n if (!recovered) throw new Error(\"Expected staged refresh recovery.\")\n await expect(storage.finalizeRefresh(fence(recovered))).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision + 1,\n scopes: [\"accounts.read\"],\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"never renews a credential lease past its operation deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-renew\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 25_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const deadline = executing.credentialMutation!.deadlineAt\n\n await options.advanceTime(root, 8_000)\n const renewed = await storage.renewCredentialMutation({\n ...fence(executing),\n holderId: \"worker-a\",\n leaseDurationMs: 30_000,\n })\n expect(renewed?.credentialMutation?.expiresAt).toEqual(deadline)\n\n await options.advanceTime(root, 17_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"disconnects every local usage atomically when revocation starts\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const first = await connect(storage, authorization, \"connection-a\", \"account-a\")\n await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-a\", label: \"ignored\" },\n replace: false,\n })\n const active = (await storage.getAuthorization(authorizationKey(authorization.id)))!\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: active.revision,\n mutation: { id: \"mutation-revoke\", kind: \"revocation\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n\n expect(claim?.authorization.status).toBe(\"revocation_pending\")\n expect(claim?.disconnected.map((connection) => connection.id).sort()).toEqual(\n [first.connection.id, \"connection-b\"].sort()\n )\n expect(\n await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))\n ).toEqual([])\n expect(\n await storage.getAuthorizationByConnectionId({\n projectId,\n connectorId,\n connectionId: first.connection.id,\n })\n ).toMatchObject({ id: authorization.id, status: \"revocation_pending\" })\n\n if (!claim) throw new Error(\"Expected revocation mutation claim.\")\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationRevocation({\n ...fence(executing),\n holderId: \"worker-a\",\n })\n if (!staged) throw new Error(\"Expected staged revocation.\")\n const revoked = await storage.finalizeRevocation(fence(staged))\n expect(revoked).toMatchObject({\n status: \"revoked\",\n credentials: undefined,\n scopes: [],\n accounts: [],\n })\n expect(await storage.listConnections({ projectId, connectorId })).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ id: first.connection.id, status: \"disconnected\" }),\n expect.objectContaining({ id: \"connection-b\", status: \"disconnected\" }),\n ])\n )\n })\n })\n\n test(\"freezes the attached connection set during reauthorization\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n const connections = await storage.listConnectionsByAuthorization(\n authorizationKey(authorization.id)\n )\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: {\n id: \"mutation-reauthorize\",\n kind: \"reauthorization\",\n holderId: \"worker-a\",\n },\n expectedConnectionIds: connections.map((connection) => connection.id),\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n\n await expect(\n storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connections[0].id,\n })\n ).rejects.toThrow(\"being reauthorized\")\n })\n })\n })\n}\n\nfunction authorizationAttempt(\n overrides: Partial<CreateConnectorAuthorizationAttemptInput> = {}\n): CreateConnectorAuthorizationAttemptInput {\n return {\n id: \"attempt-a\",\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n stateHash: \"state-hash\",\n codeVerifier: credentials,\n redirectUri: \"https://example.com/oauth/callback\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction connectionRun(\n overrides: Partial<CreateConnectorConnectionRunInput> = {}\n): CreateConnectorConnectionRunInput {\n return {\n id: \"run-a\",\n projectId,\n connectorId,\n kind: \"connect\",\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nasync function createSelectionRun(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<void> {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(connectionRunCallbackClaim())\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const attached = await storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n if (!attached) throw new Error(\"Expected authorization to be attached to the run.\")\n const waiting = await storage.waitForConnectionRunSelection({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n expiresAt: authorization.selectionExpiresAt!,\n })\n if (!waiting) throw new Error(\"Expected account-selection run.\")\n}\n\nfunction connectionRunCallbackClaim(\n overrides: Partial<ClaimConnectorConnectionRunCallbackInput> = {}\n): ClaimConnectorConnectionRunCallbackInput {\n return {\n projectId,\n attemptId: \"attempt-a\",\n stateHash: \"state-hash\",\n callbackBindingHash: \"binding-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n processingId: \"processing-a\",\n processingTtlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction authorizationKey(\n authorizationId: string,\n overrides: Partial<{ readonly projectId: string; readonly connectorId: string }> = {}\n) {\n return { projectId, connectorId, authorizationId, ...overrides }\n}\n\nfunction authorizationAttemptConsumption(id = \"attempt-a\") {\n return {\n id,\n projectId,\n connectorId,\n stateHash: \"state-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n }\n}\n\nfunction requestExecution(id: string): CreateExecutionInput {\n const requestId = `request-${id}`\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId },\n source: { type: \"http\", requestId },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n\nfunction requireTransactionConnections(storage: Storage): ConnectorConnectionStorage {\n if (storage.connectorConnections) return storage.connectorConnections\n throw new Error(\"Connector connection storage is missing from the transaction facade.\")\n}\n\nasync function createAuthorization(\n storage: ConnectorConnectionStorage,\n id: string,\n accountId: string\n): Promise<ConnectorAuthorizationRecord> {\n return storage.createAuthorization({\n id,\n projectId,\n connectorId,\n authorizedBy: { type: \"user\", id: \"user-a\" },\n credentials,\n scopes: [],\n accounts: [{ id: accountId, label: accountId }],\n selectionTtlMs: 60_000,\n })\n}\n\nasync function createActiveAuthorization(\n storage: ConnectorConnectionStorage\n): Promise<ConnectorAuthorizationRecord> {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const result = await connect(storage, authorization, \"connection-a\", \"account-a\")\n return result.authorization\n}\n\nfunction connect(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n connectionId: string,\n accountId: string\n) {\n return storage.putConnection({\n id: connectionId,\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: accountId, label: \"ignored\" },\n replace: false,\n })\n}\n\nasync function claimMutation(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n mutationId: string,\n kind: ConnectorCredentialMutationKind,\n timing: { readonly leaseDurationMs: number; readonly operationTimeoutMs: number } = {\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n }\n): Promise<ClaimConnectorCredentialMutationResult> {\n const expectedConnectionIds =\n kind === \"reauthorization\"\n ? (await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))).map(\n (connection) => connection.id\n )\n : undefined\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: mutationId, kind, holderId: \"worker-a\" },\n ...(expectedConnectionIds === undefined ? {} : { expectedConnectionIds }),\n ...timing,\n })\n if (!claim) throw new Error(`Expected '${kind}' credential mutation claim.`)\n return claim\n}\n\nasync function markExecuting(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<ConnectorAuthorizationRecord> {\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(authorization),\n holderId: \"worker-a\",\n })\n if (!executing) throw new Error(\"Expected credential mutation execution.\")\n return executing\n}\n\nfunction fence(authorization: ConnectorAuthorizationRecord) {\n return {\n projectId: authorization.projectId,\n connectorId: authorization.connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutationId: authorization.credentialMutation!.id,\n }\n}\n",
|
|
14
|
-
"import { describe, expect, test } from \"bun:test\"\nimport { defineObjectType, link, OntologyRegistry, prop } from \"../ontology\"\nimport type { Storage } from \"../storage\"\nimport { createMaterializerTestFixture } from \"./materializer-fixture\"\n\nexport interface EffectiveStorageContractSuiteOptions<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"effective-storage-contract\"\nconst Device = defineObjectType({\n id: \"EffectiveStorageDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"peers\", { cardinality: \"many\" })],\n})\nconst ontology = new OntologyRegistry({ sources: [Device] })\n\nexport function runEffectiveStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: EffectiveStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await provider.createStorage()\n try {\n await seedEffectiveState(storage)\n await body(storage)\n } finally {\n await provider.cleanup?.(storage)\n }\n }\n\n describe(name, () => {\n test(\"reads Materializer-owned objects\", async () => {\n await withStorage(async (storage) => {\n const object = await storage.objects.getByPrimaryId({\n projectId,\n objectTypeId: Device.id,\n primaryId: \"a\",\n })\n expect(object).toMatchObject({\n properties: { id: \"a\", name: \"Alpha\", temperature: 22 },\n version: 2,\n })\n expect(typeof object?.lastCommitId).toBe(\"string\")\n\n const batch = await storage.objects.getByPrimaryIdBatch({\n projectId,\n items: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"missing\" },\n ],\n })\n expect([...batch.keys()]).toEqual([`${Device.id}:a`])\n })\n })\n\n test(\"reads Materializer-owned links\", async () => {\n await withStorage(async (storage) => {\n const outgoing = await storage.objects.listLinks({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n })\n expect(outgoing.map((row) => row.targetId).sort()).toEqual([\"b\", \"c\"])\n expect(outgoing.every((row) => row.lastCommitId.length > 0)).toBe(true)\n\n const incoming = await storage.objects.listIncidentLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"b\" }],\n })\n expect(incoming).toHaveLength(1)\n expect(incoming[0]).toMatchObject({ sourceId: \"a\", targetId: \"b\" })\n\n const linksByScope = await storage.objects.listLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"a\", linkId: \"peers\" }],\n })\n expect(linksByScope.get(`${Device.id}:a:peers`)).toHaveLength(2)\n })\n })\n\n test(\"pages Materializer-owned objects with a stable cursor\", async () => {\n await withStorage(async (storage) => {\n const firstPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n limit: 2,\n })\n expect(firstPage.objects.map((row) => row.primaryId)).toEqual([\"a\", \"b\"])\n expect(firstPage.nextPrimaryId).toBe(\"b\")\n const secondPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n afterPrimaryId: firstPage.nextPrimaryId,\n limit: 2,\n })\n expect(secondPage.objects.map((row) => row.primaryId)).toEqual([\"c\"])\n })\n })\n\n test(\"reads Materializer-owned telemetry\", async () => {\n await withStorage(async (storage) => {\n const descending = await storage.timeseries.getHistory({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n from: new Date(\"2026-01-01T10:30:00.000Z\"),\n order: \"desc\",\n })\n expect(descending.map((point) => point.value)).toEqual([22])\n expect(typeof descending[0]?.lastCommitId).toBe(\"string\")\n\n const histories = await storage.timeseries.getHistoryBatch({\n projectId,\n series: [\n { objectTypeId: Device.id, objectId: \"a\", propertyId: \"temperature\" },\n { objectTypeId: Device.id, objectId: \"b\", propertyId: \"temperature\" },\n ],\n limitPerSeries: 1,\n order: \"desc\",\n })\n expect(histories.map((series) => series.points[0]?.value)).toEqual([22, 18])\n\n const latest = await storage.timeseries.getLatest({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n })\n expect(latest).toMatchObject({ value: 22, at: new Date(\"2026-01-01T12:00:00.000Z\") })\n })\n })\n })\n}\n\nasync function seedEffectiveState(storage: Storage): Promise<void> {\n const fixture = createMaterializerTestFixture({ projectId, ontology, storage })\n await fixture.seed({\n objects: [device(\"a\", \"Alpha\"), device(\"b\", \"Beta\"), device(\"c\", \"Gamma\")],\n links: [peer(\"a\", \"b\"), peer(\"a\", \"c\")],\n telemetry: [\n temperature(\"a\", 20, \"2026-01-01T10:00:00.000Z\"),\n temperature(\"a\", 22, \"2026-01-01T12:00:00.000Z\"),\n temperature(\"b\", 18, \"2026-01-01T11:00:00.000Z\"),\n ],\n })\n}\n\nfunction device(primaryId: string, name: string) {\n return {\n ref: { objectTypeId: Device.id, primaryId },\n properties: { id: primaryId, name },\n }\n}\n\nfunction peer(sourceId: string, targetId: string) {\n return {\n ref: {\n source: { objectTypeId: Device.id, primaryId: sourceId },\n linkId: \"peers\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n },\n }\n}\n\nfunction temperature(objectId: string, value: number, at: string) {\n return {\n series: {\n object: { objectTypeId: Device.id, primaryId: objectId },\n propertyId: \"temperature\",\n },\n value,\n at,\n }\n}\n",
|
|
14
|
+
"import { describe, expect, test } from \"bun:test\"\nimport { defineObjectType, link, OntologyRegistry, prop } from \"../ontology\"\nimport { linkBatchKey, objectBatchKey, objectLinkCursor, type Storage } from \"../storage\"\nimport { createMaterializerTestFixture } from \"./materializer-fixture\"\n\nexport interface EffectiveStorageContractSuiteOptions<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"effective-storage-contract\"\nconst Device = defineObjectType({\n id: \"EffectiveStorageDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"peers\", { cardinality: \"many\" })],\n})\nconst OpaqueA = defineObjectType({\n id: \"A\",\n name: \"Opaque A\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n ],\n links: [link.self(\"D\", { cardinality: \"many\" })],\n})\nconst OpaqueAB = defineObjectType({\n id: \"A:B\",\n name: \"Opaque AB\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n ],\n links: [link.self(\"D\", { cardinality: \"many\" })],\n})\nconst ontology = new OntologyRegistry({ sources: [Device, OpaqueA, OpaqueAB] })\n\nexport function runEffectiveStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: EffectiveStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await provider.createStorage()\n try {\n await seedEffectiveState(storage)\n await body(storage)\n } finally {\n await provider.cleanup?.(storage)\n }\n }\n\n describe(name, () => {\n test(\"reads Materializer-owned objects\", async () => {\n await withStorage(async (storage) => {\n const object = await storage.objects.getByPrimaryId({\n projectId,\n objectTypeId: Device.id,\n primaryId: \"a\",\n })\n expect(object).toMatchObject({\n properties: { id: \"a\", name: \"Alpha\", temperature: 22 },\n version: 2,\n })\n expect(typeof object?.lastCommitId).toBe(\"string\")\n\n const batch = await storage.objects.getByPrimaryIdBatch({\n projectId,\n items: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"missing\" },\n ],\n })\n expect([...batch.keys()]).toEqual([objectBatchKey(Device.id, \"a\")])\n })\n })\n\n test(\"reads Materializer-owned links\", async () => {\n await withStorage(async (storage) => {\n const outgoing = await storage.objects.listLinks({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n })\n expect(outgoing.map((row) => row.targetId).sort()).toEqual([\"b\", \"c\"])\n expect(outgoing.every((row) => row.lastCommitId.length > 0)).toBe(true)\n\n const incoming = await storage.objects.listIncidentLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"b\" }],\n })\n expect(incoming).toHaveLength(1)\n expect(incoming[0]).toMatchObject({ sourceId: \"a\", targetId: \"b\" })\n\n const linksByScope = await storage.objects.listLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"a\", linkId: \"peers\" }],\n })\n expect(linksByScope.get(linkBatchKey(Device.id, \"a\", \"peers\"))).toHaveLength(2)\n })\n })\n\n test(\"pages and filters incident links in the provider\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"outgoing\",\n linkId: \"peers\",\n endpointObjectTypeIds: [Device.id],\n limit: 1,\n })\n expect(first.links.map((row) => row.targetId)).toEqual([\"b\"])\n expect(first.hasMore).toBe(true)\n\n const second = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"outgoing\",\n linkId: \"peers\",\n endpointObjectTypeIds: [Device.id],\n after: objectLinkCursor(first.links[0]),\n limit: 1,\n })\n expect(second.links.map((row) => row.targetId)).toEqual([\"c\"])\n expect(second.hasMore).toBe(false)\n\n const duplicateRefs = await storage.objects.queryLinks({\n projectId,\n objectRefs: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"a\" },\n ],\n direction: \"outgoing\",\n limit: 10,\n })\n expect(duplicateRefs.links.map((row) => row.targetId)).toEqual([\"b\", \"c\"])\n\n const incoming = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"b\" }],\n direction: \"incoming\",\n limit: 10,\n })\n expect(incoming.links.map((row) => [row.sourceId, row.targetId])).toEqual([[\"a\", \"b\"]])\n\n const bothDirections = await storage.objects.queryLinks({\n projectId,\n objectRefs: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"b\" },\n ],\n direction: \"both\",\n endpointObjectTypeIds: [Device.id],\n limit: 10,\n })\n expect(bothDirections.links.map((row) => [row.sourceId, row.targetId])).toEqual([\n [\"a\", \"b\"],\n [\"a\", \"c\"],\n ])\n\n const unauthorized = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"both\",\n endpointObjectTypeIds: [],\n limit: 10,\n })\n expect(unauthorized).toEqual({ links: [], hasMore: false })\n })\n })\n\n test(\"keeps delimiter-bearing object and batch-link identities distinct\", async () => {\n await withStorage(async (storage) => {\n const opaqueProjectId = `${projectId}-opaque-batch-keys`\n const fixture = createMaterializerTestFixture({\n projectId: opaqueProjectId,\n ontology,\n storage,\n })\n await fixture.seed({\n objects: [\n {\n ref: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n properties: { id: \"B:C\", name: \"First\" },\n },\n {\n ref: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n properties: { id: \"C\", name: \"Second\" },\n },\n ],\n links: [\n {\n ref: {\n source: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n linkId: \"D\",\n target: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n },\n },\n {\n ref: {\n source: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n linkId: \"D\",\n target: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n },\n },\n ],\n })\n\n const objects = await storage.objects.getByPrimaryIdBatch({\n projectId: opaqueProjectId,\n items: [\n { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n ],\n })\n expect(objects.get(objectBatchKey(OpaqueA.id, \"B:C\"))?.properties.name).toBe(\"First\")\n expect(objects.get(objectBatchKey(OpaqueAB.id, \"C\"))?.properties.name).toBe(\"Second\")\n\n const links = await storage.objects.listLinksBatch({\n projectId: opaqueProjectId,\n items: [\n { objectTypeId: OpaqueA.id, objectId: \"B:C\", linkId: \"D\" },\n { objectTypeId: OpaqueAB.id, objectId: \"C\", linkId: \"D\" },\n ],\n })\n expect(links.get(linkBatchKey(OpaqueA.id, \"B:C\", \"D\"))).toHaveLength(1)\n expect(links.get(linkBatchKey(OpaqueAB.id, \"C\", \"D\"))).toHaveLength(1)\n })\n })\n\n test(\"preserves distinct incident links when opaque ids contain delimiters\", async () => {\n await withStorage(async (storage) => {\n const opaqueIdsProjectId = `${projectId}-opaque-link-ids`\n const firstSourceId = \"opaque:source\"\n const firstTargetId = `target:peers:${Device.id}:opaque:end`\n const secondSourceId = `${firstSourceId}:peers:${Device.id}:target`\n const secondTargetId = \"opaque:end\"\n const fixture = createMaterializerTestFixture({\n projectId: opaqueIdsProjectId,\n ontology,\n storage,\n })\n await fixture.seed({\n objects: [\n device(firstSourceId, \"First source\"),\n device(firstTargetId, \"First target\"),\n device(secondSourceId, \"Second source\"),\n device(secondTargetId, \"Second target\"),\n ],\n links: [peer(firstSourceId, firstTargetId), peer(secondSourceId, secondTargetId)],\n })\n\n const incident = await storage.objects.listIncidentLinksBatch({\n projectId: opaqueIdsProjectId,\n items: [\n { objectTypeId: Device.id, objectId: firstSourceId },\n { objectTypeId: Device.id, objectId: secondSourceId },\n ],\n })\n const matching = incident.filter(\n (row) => row.sourceId === firstSourceId || row.sourceId === secondSourceId\n )\n\n expect(matching.map((row) => [row.sourceId, row.linkId, row.targetId])).toEqual(\n expect.arrayContaining([\n [firstSourceId, \"peers\", firstTargetId],\n [secondSourceId, \"peers\", secondTargetId],\n ])\n )\n expect(matching).toHaveLength(2)\n })\n })\n\n test(\"pages Materializer-owned objects with a stable cursor\", async () => {\n await withStorage(async (storage) => {\n const firstPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n limit: 2,\n })\n expect(firstPage.objects.map((row) => row.primaryId)).toEqual([\"a\", \"b\"])\n expect(firstPage.nextPrimaryId).toBe(\"b\")\n const secondPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n afterPrimaryId: firstPage.nextPrimaryId,\n limit: 2,\n })\n expect(secondPage.objects.map((row) => row.primaryId)).toEqual([\"c\"])\n })\n })\n\n test(\"reads Materializer-owned telemetry\", async () => {\n await withStorage(async (storage) => {\n const descending = await storage.timeseries.getHistory({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n from: new Date(\"2026-01-01T10:30:00.000Z\"),\n order: \"desc\",\n })\n expect(descending.map((point) => point.value)).toEqual([22])\n expect(typeof descending[0]?.lastCommitId).toBe(\"string\")\n\n const histories = await storage.timeseries.getHistoryBatch({\n projectId,\n series: [\n { objectTypeId: Device.id, objectId: \"a\", propertyId: \"temperature\" },\n { objectTypeId: Device.id, objectId: \"b\", propertyId: \"temperature\" },\n ],\n limitPerSeries: 1,\n order: \"desc\",\n })\n expect(histories.map((series) => series.points[0]?.value)).toEqual([22, 18])\n\n const latest = await storage.timeseries.getLatest({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n })\n expect(latest).toMatchObject({ value: 22, at: new Date(\"2026-01-01T12:00:00.000Z\") })\n })\n })\n })\n}\n\nasync function seedEffectiveState(storage: Storage): Promise<void> {\n const fixture = createMaterializerTestFixture({ projectId, ontology, storage })\n await fixture.seed({\n objects: [device(\"a\", \"Alpha\"), device(\"b\", \"Beta\"), device(\"c\", \"Gamma\")],\n links: [peer(\"a\", \"b\"), peer(\"a\", \"c\")],\n telemetry: [\n temperature(\"a\", 20, \"2026-01-01T10:00:00.000Z\"),\n temperature(\"a\", 22, \"2026-01-01T12:00:00.000Z\"),\n temperature(\"b\", 18, \"2026-01-01T11:00:00.000Z\"),\n ],\n })\n}\n\nfunction device(primaryId: string, name: string) {\n return {\n ref: { objectTypeId: Device.id, primaryId },\n properties: { id: primaryId, name },\n }\n}\n\nfunction peer(sourceId: string, targetId: string) {\n return {\n ref: {\n source: { objectTypeId: Device.id, primaryId: sourceId },\n linkId: \"peers\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n },\n }\n}\n\nfunction temperature(objectId: string, value: number, at: string) {\n return {\n series: {\n object: { objectTypeId: Device.id, primaryId: objectId },\n propertyId: \"temperature\",\n },\n value,\n at,\n }\n}\n",
|
|
15
15
|
"import { createTestingScope } from \"../execution/scopes\"\nimport type { JsonValue } from \"../json\"\nimport type {\n EditCommitResult,\n OntologyEditOperation,\n OntologyLinkRef,\n OntologyObjectRef,\n TelemetryCommitResult,\n TelemetryPointWrite,\n} from \"../materialization/model\"\nimport {\n type BoundOntologyMaterializer,\n createOntologyMaterializer,\n type OntologyMaterializerDependencies,\n} from \"../materializer/materializer\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport { ProjectionRegistry } from \"../projections/registry\"\nimport type { Storage } from \"../storage\"\n\nexport interface MaterializerFixtureObject {\n readonly ref: OntologyObjectRef\n readonly properties: Readonly<Record<string, JsonValue>>\n}\n\nexport interface MaterializerFixtureLink {\n readonly ref: OntologyLinkRef\n readonly properties?: Readonly<Record<string, JsonValue>>\n}\n\nexport interface MaterializerFixtureSeed {\n readonly objects?: readonly MaterializerFixtureObject[]\n readonly links?: readonly MaterializerFixtureLink[]\n readonly telemetry?: readonly TelemetryPointWrite[]\n}\n\nexport interface MaterializerTestFixture {\n readonly materializer: BoundOntologyMaterializer\n commit(operations: readonly OntologyEditOperation[]): Promise<EditCommitResult>\n appendTelemetry(points: readonly TelemetryPointWrite[]): Promise<TelemetryCommitResult>\n seed(input: MaterializerFixtureSeed): Promise<void>\n}\n\n/**\n * Creates data for storage/query tests through the same validated Materializer path as production.\n * It intentionally exposes no direct storage writer.\n */\nexport function createMaterializerTestFixture(input: {\n readonly projectId: string\n readonly ontology: OntologyRegistry\n readonly storage: Storage\n readonly dependencies?: OntologyMaterializerDependencies\n}): MaterializerTestFixture {\n const projections = new ProjectionRegistry({\n projections: [],\n ontology: input.ontology,\n datasetsById: new Map(),\n })\n const materializer = createOntologyMaterializer({\n projectId: input.projectId,\n ontology: input.ontology,\n projections,\n storage: input.storage,\n dependencies: input.dependencies,\n }).withScope(\n createTestingScope({\n projectId: input.projectId,\n executionId: `materializer_fixture_execution:${input.projectId}`,\n requestId: `materializer_fixture_request:${input.projectId}`,\n correlationId: `materializer_fixture_correlation:${input.projectId}`,\n })\n )\n let requestOrdinal = 0\n\n function nextRequestId(kind: \"edit\" | \"telemetry\"): string {\n requestOrdinal += 1\n return `materializer-fixture:${kind}:${requestOrdinal}`\n }\n\n async function commit(operations: readonly OntologyEditOperation[]): Promise<EditCommitResult> {\n return materializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: nextRequestId(\"edit\") },\n operations,\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n }\n\n async function appendTelemetry(\n points: readonly TelemetryPointWrite[]\n ): Promise<TelemetryCommitResult> {\n return materializer.telemetry.append({\n source: { kind: \"runtime\", requestId: nextRequestId(\"telemetry\") },\n points,\n })\n }\n\n return {\n materializer,\n commit,\n appendTelemetry,\n async seed(seed) {\n const operations: OntologyEditOperation[] = []\n for (const object of seed.objects ?? []) {\n operations.push({\n id: `seed-object:${operations.length}`,\n kind: \"object.upsert\",\n ref: object.ref,\n properties: object.properties,\n })\n }\n for (const link of seed.links ?? []) {\n operations.push({\n id: `seed-link:${operations.length}`,\n kind: \"link.upsert\",\n ref: link.ref,\n ...(link.properties === undefined ? {} : { properties: link.properties }),\n })\n }\n if (operations.length > 0) await commit(operations)\n if (seed.telemetry && seed.telemetry.length > 0) {\n await appendTelemetry(seed.telemetry)\n }\n },\n }\n}\n",
|
|
16
16
|
"import type { AuthorizationContext } from \"../authorization\"\nimport { createTestingScope } from \"../execution/scopes\"\nimport type { ExecutionScope } from \"../execution/types\"\nimport type { OntologySource } from \"../ontology\"\nimport { SixbHost, type SixbHostOptions } from \"../runtime/host\"\nimport { isBoundSixb, type Sixb } from \"../runtime/sixb\"\n\nexport type { AuthorizationContext } from \"../authorization\"\n\nexport interface TestExecutionOptions {\n readonly authorization?: AuthorizationContext\n readonly executionId?: string\n readonly requestId?: string\n readonly correlationId?: string\n}\n\n/**\n * Bind a host to principal test authority from `authorization`, or to explicit disabled authority\n * when omitted. Test executions deliberately omit live session identity. Trusted primitive and\n * kernel authority remain unavailable to application tests.\n */\nexport interface TestExecutionHost {\n readonly id: string\n withScope(scope: ExecutionScope): object\n}\n\nexport function createTestSixb<\n TOntologySources extends readonly OntologySource[] = readonly OntologySource[],\n>(\n hostOrOptions: TestExecutionHost | SixbHostOptions<TOntologySources>,\n options: TestExecutionOptions = {}\n): Sixb<TOntologySources> {\n const host: TestExecutionHost =\n \"withScope\" in hostOrOptions ? hostOrOptions : new SixbHost(hostOrOptions)\n const sixb = host.withScope(\n createTestingScope({\n projectId: host.id,\n ...(options.authorization === undefined ? {} : { context: options.authorization }),\n ...(options.executionId === undefined ? {} : { executionId: options.executionId }),\n ...(options.requestId === undefined ? {} : { requestId: options.requestId }),\n ...(options.correlationId === undefined ? {} : { correlationId: options.correlationId }),\n })\n )\n if (!isBoundSixb<TOntologySources>(sixb)) {\n throw new Error(\"[Sixb] Test host did not return an execution-bound Sixb SDK.\")\n }\n return sixb\n}\n",
|
|
17
17
|
"import { describe, expect, test } from \"bun:test\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport type {\n CreateExecutionInput,\n ExecutionStorage,\n TrustedPrimitiveKind,\n} from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\n\nexport type ExecutionStorageContractStorage = Storage & {\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface ExecutionStorageContractSuiteOptions<\n TStorage extends ExecutionStorageContractStorage = ExecutionStorageContractStorage,\n> {\n /** Factory that returns one isolated, migrated storage bundle for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"execution-contract\"\nconst createdAt = new Date(\"2026-06-01T12:00:00.000Z\")\nconst expiresAt = new Date(\"2027-06-01T12:00:00.000Z\")\n\n/** Runs the immutable execution-ledger contract against one complete storage provider. */\nexport function runExecutionStorageContractSuite<TStorage extends ExecutionStorageContractStorage>(\n label: string,\n options: ExecutionStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"round-trips every durable executor and authority shape\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n\n const records = [\n principalRequest({\n id: \"principal-request\",\n credential: { type: \"session\", id: \"session-user\" },\n }),\n principalRequest({\n id: \"service-request\",\n principal: { type: \"serviceAccount\", id: \"service-one\" },\n credential: { type: \"accessToken\", id: \"token-service\" },\n }),\n disabledRequest(\"disabled-request\"),\n ...trustedPrimitiveKinds.map((kind) => trustedPrimitive(`${kind}-execution`, {}, kind)),\n agentExecution(\"agent-execution\"),\n kernelExecution(\"kernel-execution\"),\n ] as const\n\n for (const input of records) {\n const creationStartedAt = new Date()\n const created = await storage.executions.create(input)\n const { createdAt: persistedAt, ...persistedInput } = created\n expect(persistedInput).toEqual(input)\n expect(Number.isFinite(persistedAt.getTime())).toBe(true)\n expect(persistedAt.getTime()).toBeGreaterThanOrEqual(creationStartedAt.getTime())\n expect(\n await storage.executions.getById({ projectId: input.projectId, id: input.id })\n ).toEqual(created)\n }\n\n const first = await storage.executions.getById({ projectId, id: \"principal-request\" })\n if (!first || first.authorizationRef.type !== \"principal\") {\n throw new Error(\"Expected principal execution fixture\")\n }\n const persisted = structuredClone(first)\n ;(first.authorizationRef.principal as { id: string }).id = \"mutated\"\n first.createdAt.setUTCFullYear(2000)\n expect(await storage.executions.getById({ projectId, id: first.id })).toEqual(persisted)\n })\n })\n\n test(\"keeps execution identity immutable and project-scoped\", async () => {\n await withStorage(async (storage) => {\n const first = disabledRequest(\"shared-id\")\n await storage.executions.create(first)\n\n await expect(storage.executions.create(first)).rejects.toMatchObject({\n code: \"duplicate_execution\",\n })\n\n const otherProject = disabledRequest(\"shared-id\", \"execution-contract-other\")\n await expect(storage.executions.create(otherProject)).resolves.toMatchObject({\n projectId: otherProject.projectId,\n })\n expect(\n await storage.executions.getById({ projectId: \"missing-project\", id: first.id })\n ).toBeNull()\n\n const backdated = await storage.executions.create({\n ...disabledRequest(\"caller-timestamp\"),\n createdAt: new Date(\"2000-01-01T00:00:00.000Z\"),\n } as CreateExecutionInput)\n expect(backdated.createdAt.getUTCFullYear()).not.toBe(2000)\n })\n })\n\n test(\"admits exactly one concurrent create for an execution id\", async () => {\n await withStorage(async (storage) => {\n const input = disabledRequest(\"concurrent-id\")\n const results = await Promise.allSettled([\n storage.executions.create(input),\n storage.executions.create(input),\n ])\n\n expect(results.filter((result) => result.status === \"fulfilled\")).toHaveLength(1)\n const [rejected] = results.filter((result) => result.status === \"rejected\")\n expect(rejected?.reason).toMatchObject({ code: \"duplicate_execution\" })\n })\n })\n\n test(\"rejects non-durable sources and executor-authority mismatches\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n\n const invalidInputs: readonly CreateExecutionInput[] = [\n {\n ...disabledRequest(\"queue-source\"),\n source: { type: \"queue\", queue: \"actions\", jobId: \"job-1\" },\n } as unknown as CreateExecutionInput,\n {\n ...disabledRequest(\"wrong-request-source\"),\n source: { type: \"http\", requestId: \"different-request\" },\n },\n {\n ...disabledRequest(\"principal-missing-requester\"),\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"user\", id: \"user-one\" },\n },\n },\n {\n ...trustedPrimitive(\"untrusted-primitive\"),\n authorizationRef: { type: \"disabled\" },\n },\n {\n ...agentExecution(\"user-agent\"),\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"user\", id: \"user-one\" },\n },\n },\n {\n ...kernelExecution(\"requested-kernel\"),\n requestedBy: { type: \"user\", id: \"user-one\" },\n },\n ]\n\n for (const input of invalidInputs) {\n await expect(storage.executions.create(input)).rejects.toMatchObject({\n code: \"invalid_input\",\n })\n }\n })\n })\n\n test(\"requires every principal and verifies credential ownership\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"missing-principal\",\n principal: { type: \"user\", id: \"unknown-user\" },\n })\n )\n ).rejects.toMatchObject({ code: \"missing_principal\" })\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"missing-session\",\n credential: { type: \"session\", id: \"missing-session\" },\n })\n )\n ).rejects.toMatchObject({ code: \"missing_credential\" })\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"wrong-session-owner\",\n credential: { type: \"session\", id: \"session-other\" },\n })\n )\n ).rejects.toMatchObject({ code: \"invalid_credential\" })\n\n await expect(\n storage.executions.create({\n ...trustedPrimitive(\"missing-requester\"),\n requestedBy: { type: \"user\", id: \"unknown-user\" },\n })\n ).rejects.toMatchObject({ code: \"missing_principal\" })\n })\n })\n\n test(\"requires children to preserve direct parent provenance\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n await storage.executions.create(principalRequest({ id: \"parent\" }))\n\n const validChild = trustedPrimitive(\"valid-child\", {\n correlationId: \"correlation-parent\",\n source: { type: \"execution\", executionId: \"parent\" },\n })\n const storedChild = await storage.executions.create(validChild)\n expect(storedChild).toMatchObject({\n source: { type: \"execution\", executionId: \"parent\" },\n })\n expect(storedChild).not.toHaveProperty(\"parentExecutionId\")\n\n const invalidChildren: readonly [CreateExecutionInput, string][] = [\n [\n trustedPrimitive(\"missing-parent\", {\n source: { type: \"execution\", executionId: \"unknown-parent\" },\n }),\n \"missing_parent_execution\",\n ],\n [\n trustedPrimitive(\"wrong-correlation\", {\n correlationId: \"different-correlation\",\n source: { type: \"execution\", executionId: \"parent\" },\n }),\n \"invalid_parent_execution\",\n ],\n [\n trustedPrimitive(\"wrong-requester\", {\n requestedBy: { type: \"user\", id: \"user-other\" },\n source: { type: \"execution\", executionId: \"parent\" },\n }),\n \"invalid_parent_execution\",\n ],\n ]\n\n for (const [input, code] of invalidChildren) {\n await expect(storage.executions.create(input)).rejects.toMatchObject({ code })\n }\n })\n })\n\n test(\"participates in storage transactions and rollback\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.transaction(async (tx) => {\n await tx.executions.create(disabledRequest(\"rolled-back\"))\n throw new Error(\"rollback\")\n })\n ).rejects.toThrow(\"rollback\")\n expect(await storage.executions.getById({ projectId, id: \"rolled-back\" })).toBeNull()\n\n await storage.transaction((tx) => tx.executions.create(disabledRequest(\"committed\")))\n expect(await storage.executions.getById({ projectId, id: \"committed\" })).not.toBeNull()\n })\n })\n })\n}\n\nasync function seedAuth(auth: AuthStorage): Promise<void> {\n await auth.users.create({\n id: \"user-one\",\n projectId,\n email: \"one@example.com\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.users.create({\n id: \"user-other\",\n projectId,\n email: \"other@example.com\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.serviceAccounts.create({\n id: \"service-one\",\n projectId,\n name: \"Service one\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.sessions.create({\n id: \"session-user\",\n projectId,\n userId: \"user-one\",\n strategyId: \"contract\",\n audience: \"atlas\",\n tokenHash: \"session-user-hash\",\n createdAt,\n expiresAt,\n })\n await auth.sessions.create({\n id: \"session-other\",\n projectId,\n userId: \"user-other\",\n strategyId: \"contract\",\n audience: \"atlas\",\n tokenHash: \"session-other-hash\",\n createdAt,\n expiresAt,\n })\n await auth.accessTokens.create({\n id: \"token-service\",\n projectId,\n name: \"Service token\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"service-one\",\n tokenHash: \"service-token-hash\",\n createdAt,\n expiresAt,\n })\n}\n\nfunction principalRequest(input: {\n readonly id: string\n readonly principal?: { readonly type: \"user\" | \"serviceAccount\"; readonly id: string }\n readonly credential?:\n | { readonly type: \"session\"; readonly id: string }\n | { readonly type: \"accessToken\"; readonly id: string }\n}): CreateExecutionInput {\n const principal = input.principal ?? ({ type: \"user\", id: \"user-one\" } as const)\n return {\n id: input.id,\n projectId,\n requestedBy: principal,\n executor: { type: \"request\", requestId: `request-${input.id}` },\n source: { type: \"http\", requestId: `request-${input.id}` },\n correlationId: input.id === \"parent\" ? \"correlation-parent\" : `correlation-${input.id}`,\n authorizationRef: {\n type: \"principal\",\n principal,\n ...(input.credential === undefined ? {} : { credential: input.credential }),\n },\n }\n}\n\nfunction disabledRequest(id: string, inputProjectId = projectId): CreateExecutionInput {\n return {\n id,\n projectId: inputProjectId,\n executor: { type: \"request\", requestId: `request-${id}` },\n source: { type: \"http\", requestId: `request-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n\nfunction trustedPrimitive(\n id: string,\n overrides: Partial<Pick<CreateExecutionInput, \"correlationId\" | \"requestedBy\" | \"source\">> = {},\n kind: TrustedPrimitiveKind = \"action\"\n): CreateExecutionInput {\n const runId = `run-${id}`\n return {\n id,\n projectId,\n requestedBy: { type: \"user\", id: \"user-one\" },\n executor: { type: \"primitive\", kind, runId },\n source: trustedPrimitiveSource(kind, id),\n correlationId: `correlation-${id}`,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind, id: `contract.${kind}`, runId },\n },\n ...overrides,\n }\n}\n\nfunction trustedPrimitiveSource(\n kind: TrustedPrimitiveKind,\n id: string\n): CreateExecutionInput[\"source\"] {\n if (kind === \"pipeline\") {\n return { type: \"schedule\", eventId: `schedule-event-${id}` }\n }\n if (kind === \"projection\") {\n return {\n type: \"datasetVersion\",\n datasetId: \"contract-dataset\",\n versionId: `version-${id}`,\n }\n }\n if (kind === \"webhook\") {\n return { type: \"webhook\", deliveryId: `delivery-${id}` }\n }\n return { type: \"event\", eventId: `event-${id}` }\n}\n\nconst trustedPrimitiveKinds = [\n \"action\",\n \"pipeline\",\n \"projection\",\n \"rule\",\n \"sync\",\n \"webhook\",\n \"workflow\",\n] as const satisfies readonly TrustedPrimitiveKind[]\n\nfunction agentExecution(id: string): CreateExecutionInput {\n return {\n id,\n projectId,\n requestedBy: { type: \"user\", id: \"user-one\" },\n executor: { type: \"agent\", runId: `run-${id}` },\n source: { type: \"event\", eventId: `event-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"serviceAccount\", id: \"service-one\" },\n },\n }\n}\n\nfunction kernelExecution(id: string): CreateExecutionInput {\n const operation = { type: \"ontology.recover\", recoveryId: `recovery-${id}` } as const\n return {\n id,\n projectId,\n executor: { type: \"kernel\", operation },\n source: { type: \"event\", eventId: `event-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"kernel\", operation },\n }\n}\n",
|
|
18
18
|
"import { describe, expect, test } from \"bun:test\"\nimport { change, col, defineDataset } from \"../datasets\"\nimport type { DatasetMergeCommitResult, DatasetRow, LakeStorage } from \"../lake-storage\"\n\nexport interface LakeMergeStorageContractSuiteOptions<TStorage extends LakeStorage = LakeStorage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst invoices = defineDataset(\"contract.merges.invoices\", {\n schema: [col(\"id\", \"string\"), col(\"status\", \"string\"), col(\"note\", \"string\", { nullable: true })],\n primaryKey: \"id\",\n})\n\nconst lineItems = defineDataset(\"contract.merges.line_items\", {\n schema: [col(\"invoiceId\", \"string\"), col(\"lineItemId\", \"string\"), col(\"description\", \"string\")],\n primaryKey: [\"invoiceId\", \"lineItemId\"],\n})\n\nconst unkeyed = defineDataset(\"contract.merges.unkeyed\", {\n schema: [col(\"id\", \"string\")],\n})\n\nexport function runLakeMergeStorageContractSuite<TStorage extends LakeStorage>(\n label: string,\n options: LakeMergeStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"creates an initial merge version from async changes\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const merge = await storage.beginMerge({\n dataset: invoices,\n producer: { kind: \"sync\", id: \"sync-invoices\", runId: \"run_1\" },\n inputs: [{ datasetId: \"source.events\", versionId: \"cursor_1\" }],\n })\n\n async function* changes() {\n yield change.upsert({ id: \"inv_1\", status: \"open\", note: null })\n yield change.upsert({ id: \"inv_2\", status: \"paid\", note: \"settled\" })\n }\n\n await merge.writeChanges(changes())\n const result = await merge.commit({ commitMessage: \"initial invoice changes\" })\n const version = expectCreated(result)\n\n expect(version).toMatchObject({\n datasetId: invoices.id,\n mode: \"merge\",\n rowCount: 2,\n producer: { kind: \"sync\", id: \"sync-invoices\", runId: \"run_1\" },\n inputs: [{ datasetId: \"source.events\", versionId: \"cursor_1\" }],\n })\n expect(version.parentVersionId).toBeUndefined()\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"paid\", note: \"settled\" },\n ])\n })\n })\n\n test(\"inserts, updates, and deletes while preserving the parent version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const seed = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await seed.writeRows([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"open\", note: null },\n ])\n const parent = await seed.commit()\n\n const merge = await storage.beginMerge({ dataset: invoices })\n await merge.writeChanges([\n change.upsert({ id: \"inv_1\", status: \"paid\", note: null }),\n // Primary keys are immutable, so moving a row is an old-key delete plus a complete row.\n change.delete({ id: \"inv_2\" }),\n change.upsert({ id: \"inv_2_moved\", status: \"open\", note: \"moved\" }),\n ])\n const version = expectCreated(await merge.commit())\n\n expect(version.parentVersionId).toBe(parent.versionId)\n expect(version.mode).toBe(\"merge\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"paid\", note: null },\n { id: \"inv_2_moved\", status: \"open\", note: \"moved\" },\n ])\n await expect(\n collectRows(storage.readRows({ datasetId: invoices.id, versionId: parent.versionId }))\n ).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"open\", note: null },\n ])\n })\n })\n\n test(\"applies the final change for repeated single and composite keys\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(lineItems)\n const merge = await storage.beginMerge({ dataset: lineItems })\n await merge.writeChanges([\n change.upsert({ invoiceId: \"a|b\", lineItemId: \"c\", description: \"first\" }),\n change.upsert({ invoiceId: \"a\", lineItemId: \"b|c\", description: \"other key\" }),\n ])\n await merge.writeChanges([\n change.delete({ invoiceId: \"a|b\", lineItemId: \"c\" }),\n change.upsert({ invoiceId: \"a|b\", lineItemId: \"c\", description: \"final\" }),\n ])\n expectCreated(await merge.commit())\n\n await expect(collectRows(storage.readRows({ datasetId: lineItems.id }))).resolves.toEqual([\n { invoiceId: \"a|b\", lineItemId: \"c\", description: \"final\" },\n { invoiceId: \"a\", lineItemId: \"b|c\", description: \"other key\" },\n ])\n })\n })\n\n test(\"does not create versions when visible rows do not change\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n\n const empty = await storage.beginMerge({ dataset: invoices })\n expect(await empty.commit()).toEqual({ outcome: \"unchanged\", version: null })\n\n const initialNoOp = await storage.beginMerge({ dataset: invoices })\n await initialNoOp.writeChanges([change.delete({ id: \"missing\" })])\n expect(await initialNoOp.commit()).toEqual({ outcome: \"unchanged\", version: null })\n expect(await storage.listVersions(invoices.id)).toEqual([])\n\n const seed = await storage.beginMerge({ dataset: invoices })\n await seed.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n const seedVersion = expectCreated(await seed.commit())\n\n const identical = await storage.beginMerge({ dataset: invoices })\n await identical.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n expect(await identical.commit()).toMatchObject({\n outcome: \"unchanged\",\n version: { versionId: seedVersion.versionId },\n })\n\n const laterNoOp = await storage.beginMerge({ dataset: invoices })\n await laterNoOp.writeChanges([\n change.upsert({ id: \"inv_1\", status: \"paid\", note: null }),\n change.upsert({ id: \"inv_1\", status: \"open\" }),\n change.delete({ id: \"missing\" }),\n ])\n const noOpResult = await laterNoOp.commit()\n\n expect(noOpResult).toMatchObject({ outcome: \"unchanged\" })\n expect(noOpResult.version?.versionId).toBe(seedVersion.versionId)\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n })\n })\n\n test(\"automatically rejects stale merge sessions, including an absent base\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const first = await storage.beginMerge({ dataset: invoices })\n const stale = await storage.beginMerge({ dataset: invoices })\n\n await first.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n await first.commit()\n await stale.writeChanges([change.upsert({ id: \"inv_2\", status: \"open\" })])\n\n await expect(stale.commit()).rejects.toThrow(\"Optimistic merge commit failed\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n ])\n })\n })\n\n test(\"checks an explicit latest-version guard against the captured merge base\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const seed = await storage.beginMerge({ dataset: invoices })\n await seed.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\" })])\n const version = expectCreated(await seed.commit())\n\n await expect(\n storage.beginMerge({ dataset: invoices, expectedLatestVersionId: \"stale-version\" })\n ).rejects.toThrow(\"Optimistic merge start failed\")\n\n const guarded = await storage.beginMerge({\n dataset: invoices,\n expectedLatestVersionId: version.versionId,\n })\n await guarded.abort()\n })\n })\n\n test(\"serializes concurrent commits from the same base\", async () => {\n // Regression guard: bypassing a provider's per-dataset commit lock lets both commits create\n // versions from the same base and makes the fulfilled-count assertion fail.\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const left = await storage.beginMerge({ dataset: invoices })\n const right = await storage.beginMerge({ dataset: invoices })\n await left.writeChanges([change.upsert({ id: \"inv_left\", status: \"open\" })])\n await right.writeChanges([change.upsert({ id: \"inv_right\", status: \"open\" })])\n\n const results = await Promise.allSettled([left.commit(), right.commit()])\n\n expect(results.filter((result) => result.status === \"fulfilled\")).toHaveLength(1)\n expect(results.filter((result) => result.status === \"rejected\")).toHaveLength(1)\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n expect(await collectRows(storage.readRows({ datasetId: invoices.id }))).toHaveLength(1)\n })\n })\n\n test(\"rejects unkeyed datasets and malformed changes\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(unkeyed)\n await expect(storage.beginMerge({ dataset: unkeyed })).rejects.toThrow(\n \"must define a primaryKey\"\n )\n\n await storage.createDataset(invoices)\n const merge = await storage.beginMerge({ dataset: invoices })\n await expect(merge.writeChanges([change.upsert({ id: \"inv_1\" })])).rejects.toThrow(\n \"missing required column 'status'\"\n )\n await expect(merge.writeChanges([change.delete({})])).rejects.toThrow(\n \"missing primary-key column 'id'\"\n )\n await expect(\n merge.writeChanges([{ kind: \"delete\", key: { id: \"inv_1\", extra: \"x\" } }])\n ).rejects.toThrow(\"unknown column 'extra'\")\n await merge.abort()\n })\n })\n\n test(\"enforces unique keys for snapshot and append baselines\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n\n const duplicateSnapshot = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await expect(\n duplicateSnapshot.writeRows([\n { id: \"inv_1\", status: \"open\" },\n { id: \"inv_1\", status: \"paid\" },\n ])\n ).rejects.toThrow(\"duplicate primary key\")\n await duplicateSnapshot.abort()\n\n const seed = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await seed.writeRows([{ id: \"inv_1\", status: \"open\" }])\n await seed.commit()\n\n const conflictingAppend = await storage.beginWrite({ dataset: invoices, mode: \"append\" })\n await conflictingAppend.writeRows([{ id: \"inv_1\", status: \"paid\" }])\n await expect(conflictingAppend.commit()).rejects.toThrow(\"duplicate primary key\")\n })\n })\n\n test(\"clones staged changes and enforces the session lifecycle\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const row = { id: \"inv_1\", status: \"open\", note: null }\n const merge = await storage.beginMerge({ dataset: invoices })\n await merge.writeChanges([change.upsert(row)])\n row.status = \"paid\"\n expectCreated(await merge.commit())\n await merge.abort()\n\n await expect(merge.writeChanges([])).rejects.toThrow(\"already closed\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n ])\n\n const aborted = await storage.beginMerge({ dataset: invoices })\n await aborted.writeChanges([change.delete({ id: \"inv_1\" })])\n await aborted.abort()\n await aborted.abort()\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n })\n })\n })\n}\n\nfunction expectCreated(result: DatasetMergeCommitResult) {\n expect(result.outcome).toBe(\"created\")\n if (result.outcome !== \"created\") {\n throw new Error(\"Expected merge to create a dataset version\")\n }\n return result.version\n}\n\nasync function collectRows(rows: AsyncIterable<DatasetRow>): Promise<DatasetRow[]> {\n const result: DatasetRow[] = []\n for await (const row of rows) {\n result.push(row)\n }\n return result\n}\n",
|
|
19
|
-
"import { describe, expect, test } from \"bun:test\"\nimport type { FileRef } from \"../blob-storage\"\nimport { col, defineDataset } from \"../datasets\"\nimport { LakeStorageError } from \"../lake-storage/errors\"\nimport type { DatasetRow, LakeStorage } from \"../lake-storage/types\"\n\nexport type LakeStorageSchemaEvolutionCapability = \"strict\" | \"addNullableColumns\"\n\nexport interface LakeStorageContractSuiteOptions<TStorage extends LakeStorage = LakeStorage> {\n /** Factory that produces a fresh `LakeStorage` instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n /**\n * Dataset definition update policy supported by the provider. Defaults to\n * `strict`, which allows metadata-only merges but rejects schema evolution.\n */\n readonly schemaEvolution?: LakeStorageSchemaEvolutionCapability\n /**\n * Version id that is syntactically valid for the provider but should not\n * exist. Defaults to a generic id accepted by providers without format\n * restrictions.\n */\n readonly missingVersionId?: string\n}\n\nconst definitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst reorderedDefinitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"customerName\", \"string\"), col(\"orderId\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst keyedDefinitionDataset = defineDataset(\"contract.definitions.keyed_orders\", {\n schema: [col(\"tenantId\", \"string\"), col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n primaryKey: [\"tenantId\", \"orderId\"],\n description: \"Contract keyed orders\",\n})\n\nconst writeDataset = defineDataset(\"contract.writes.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n})\n\nconst nullableWriteDataset = defineDataset(\"contract.writes.nullable_orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"note\", \"string\", { nullable: true })],\n})\n\nconst decimalWriteDataset = defineDataset(\"contract.writes.decimals\", {\n schema: [col(\"id\", \"string\"), col(\"amount\", \"decimal\", { nullable: true })],\n})\n\nconst fileRefDataset = defineDataset(\"contract.files.documents\", {\n schema: [col(\"id\", \"string\"), col(\"attachment\", \"fileRef\", { nullable: true })],\n})\n\nconst invoiceRef: FileRef = {\n blobId: `blob_${\"a\".repeat(64)}`,\n digest: `sha256:${\"a\".repeat(64)}`,\n sizeBytes: 15,\n fileName: \"invoice.txt\",\n mediaType: \"text/plain\",\n logicalPath: \"invoices/invoice.txt\",\n}\n\n/**\n * Runs the shared `LakeStorage` contract against any provider.\n *\n * The suite covers provider-independent Lake semantics: definition\n * materialization and compatibility checks, versioned writes and reads,\n * optimistic commits, unchanged-write detection, write-session lifecycle,\n * and row validation.\n */\nexport function runLakeStorageContractSuite<TStorage extends LakeStorage>(\n label: string,\n options: LakeStorageContractSuiteOptions<TStorage>\n): void {\n const schemaEvolution = options.schemaEvolution ?? \"strict\"\n const missingVersionId = options.missingVersionId ?? \"missing-version\"\n\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n describe(\"dataset definitions\", () => {\n test(\"creates, gets, lists, and reuses dataset definitions\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n\n const created = await storage.createDataset(definitionDataset)\n const repeated = await storage.createDataset(definitionDataset)\n\n expect(created).toEqual(definitionDataset)\n expect(repeated).toEqual(definitionDataset)\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n expect(await storage.getDataset(\"missing.dataset\")).toBeNull()\n expect(await storage.listDatasets()).toEqual([definitionDataset])\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"round-trips keyed definitions through create, get, list, and reuse\", async () => {\n // Regression guard: omitting primaryKey from mergeDatasetDefinition makes reuse lose\n // the key and fails this contract case.\n await withStorage(async (storage) => {\n const created = await storage.createDataset(keyedDefinitionDataset)\n const repeated = await storage.createDataset(keyedDefinitionDataset)\n\n expect(created).toEqual(keyedDefinitionDataset)\n expect(repeated).toEqual(keyedDefinitionDataset)\n expect(await storage.getDataset(keyedDefinitionDataset.id)).toEqual(\n keyedDefinitionDataset\n )\n expect(await storage.listDatasets()).toEqual([keyedDefinitionDataset])\n expect(await storage.listVersions(keyedDefinitionDataset.id)).toEqual([])\n })\n })\n\n test(\"treats same-column declaration reorders as a no-op\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(definitionDataset)\n await storage.assertDatasetDefinitionsCompatible([reorderedDefinitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n await expect(storage.createDataset(reorderedDefinitionDataset)).resolves.toEqual(\n definitionDataset\n )\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"persists compatible metadata additions\", async () => {\n await withStorage(async (storage) => {\n const minimalDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n })\n const documentedDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n partitionBy: [\"orderDate\"],\n description: \"Contract metadata\",\n })\n\n await storage.createDataset(minimalDataset)\n await storage.assertDatasetDefinitionsCompatible([documentedDataset])\n\n expect(await storage.getDataset(minimalDataset.id)).toEqual(minimalDataset)\n await expect(storage.createDataset(documentedDataset)).resolves.toEqual(documentedDataset)\n expect(await storage.getDataset(minimalDataset.id)).toEqual(documentedDataset)\n })\n })\n\n test(\"rejects incompatible definition changes without mutating the stored definition\", async () => {\n await withStorage(async (storage) => {\n const changedDataset = defineDataset(definitionDataset.id, {\n schema: [col(\"orderId\", \"int64\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n })\n\n await storage.createDataset(definitionDataset)\n\n await expect(\n storage.assertDatasetDefinitionsCompatible([changedDataset])\n ).rejects.toThrow(\"changing column 'orderId' type\")\n await expect(storage.createDataset(changedDataset)).rejects.toBeInstanceOf(\n LakeStorageError\n )\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n })\n })\n\n test(\"checks provider schema evolution policy\", async () => {\n await withStorage(async (storage) => {\n const initialDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\")],\n })\n const requestedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"currency\", \"string\", { nullable: true }), col(\"invoiceId\", \"string\")],\n })\n const storedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\"), col(\"currency\", \"string\", { nullable: true })],\n })\n\n await storage.createDataset(initialDataset)\n\n if (schemaEvolution === \"strict\") {\n await expect(\n storage.assertDatasetDefinitionsCompatible([requestedDataset])\n ).rejects.toThrow(\"incompatible schema\")\n await expect(storage.createDataset(requestedDataset)).rejects.toThrow(\n \"incompatible schema\"\n )\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n return\n }\n\n await storage.assertDatasetDefinitionsCompatible([requestedDataset])\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n expect(await storage.listVersions(initialDataset.id)).toEqual([])\n\n await expect(storage.createDataset(requestedDataset)).resolves.toEqual(storedDataset)\n expect(await storage.getDataset(initialDataset.id)).toEqual(storedDataset)\n\n const [schemaVersion] = await storage.listVersions(initialDataset.id)\n expect(schemaVersion).toMatchObject({\n datasetId: initialDataset.id,\n mode: \"schema\",\n schema: storedDataset.schema,\n })\n })\n })\n\n test(\"keeps compatibility checks read-only for missing datasets\", async () => {\n await withStorage(async (storage) => {\n await storage.assertDatasetDefinitionsCompatible([definitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n expect(await storage.listDatasets()).toEqual([])\n })\n })\n })\n\n describe(\"catalog state\", () => {\n test(\"reports materialized state and latest version summaries in bulk\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const commit = await write.commit()\n expect(commit.outcome).toBe(\"created\")\n const version = commit\n\n await storage.createDataset(definitionDataset)\n\n const state = await storage.listDatasetCatalogState([\n writeDataset.id,\n definitionDataset.id,\n \"contract.missing.dataset\",\n ])\n\n const byId = new Map(state.map((entry) => [entry.datasetId, entry]))\n\n expect(byId.get(writeDataset.id)).toMatchObject({\n datasetId: writeDataset.id,\n materialized: true,\n })\n expect(byId.get(writeDataset.id)?.latestVersion).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n // Created without a committed write: materialized, but no version.\n expect(byId.get(definitionDataset.id)).toEqual({\n datasetId: definitionDataset.id,\n materialized: true,\n latestVersion: null,\n })\n\n // Registered but never created.\n expect(byId.get(\"contract.missing.dataset\")).toEqual({\n datasetId: \"contract.missing.dataset\",\n materialized: false,\n latestVersion: null,\n })\n })\n })\n\n test(\"returns an empty result for an empty request\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.listDatasetCatalogState([])).toEqual([])\n })\n })\n })\n\n describe(\"writes and reads\", () => {\n test(\"keeps immutable-version row order and offsets stable\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n const expected = [\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_5\", customerName: \"Margaret\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_4\", customerName: \"Dorothy\" },\n ]\n await write.writeRows(expected)\n const version = await write.commit()\n const pinned = { datasetId: writeDataset.id, versionId: version.versionId }\n\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n for (const offset of [0, 2, expected.length, expected.length + 3]) {\n await expect(collectRows(storage.readRows({ ...pinned, offset }))).resolves.toEqual(\n expected.slice(offset)\n )\n }\n await expect(\n collectRows(storage.readRows({ ...pinned, columns: [\"orderId\"], offset: 1, limit: 2 }))\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_5\" }])\n })\n })\n\n test(\"rejects writes for unknown datasets\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.beginWrite({ dataset: writeDataset })).rejects.toThrow(\n \"Unknown dataset\"\n )\n })\n })\n\n test(\"commits snapshot and append versions with versioned reads\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const snapshotWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n })\n await snapshotWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const snapshotCommit = await snapshotWrite.commit({ commitMessage: \"snapshot orders\" })\n expect(snapshotCommit.outcome).toBe(\"created\")\n const version1 = snapshotCommit\n\n expect(version1).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"snapshot\",\n schema: writeDataset.schema,\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n rowCount: 2,\n })\n expect(version1.parentVersionId).toBeUndefined()\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version1.versionId,\n })\n expect(await storage.getVersion(writeDataset.id, version1.versionId)).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version1.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n await Bun.sleep(2)\n\n const appendWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n })\n await appendWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n const appendCommit = await appendWrite.commit({\n expectedLatestVersionId: version1.versionId,\n })\n expect(appendCommit.outcome).toBe(\"created\")\n const version2 = appendCommit\n\n expect(version2).toMatchObject({\n datasetId: writeDataset.id,\n parentVersionId: version1.versionId,\n mode: \"append\",\n schema: writeDataset.schema,\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n rowCount: 3,\n })\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version2.versionId,\n })\n\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: version1.versionId })\n )\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 2,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 1,\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }, { orderId: \"ord_3\" }])\n\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([version2.versionId, version1.versionId])\n expect(\n (await storage.listVersions(writeDataset.id, 1)).map((version) => version.versionId)\n ).toEqual([version2.versionId])\n expect(await storage.listVersions(\"missing.dataset\")).toEqual([])\n expect(await storage.getLatestVersion(\"missing.dataset\")).toBeNull()\n expect(await storage.getVersion(writeDataset.id, missingVersionId)).toBeNull()\n })\n })\n\n test(\"snapshot writes replace the visible latest rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const firstWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await firstWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const firstVersion = await firstWrite.commit()\n\n const replacementWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await replacementWrite.writeRows([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n const replacementVersion = await replacementWrite.commit()\n\n expect(replacementVersion.versionId).not.toBe(firstVersion.versionId)\n expect(replacementVersion.parentVersionId).toBeUndefined()\n expect(replacementVersion.rowCount).toBe(1)\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: firstVersion.versionId })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"reuses the latest version when a snapshot commits identical content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const seedVersion = await seedWrite.commit()\n expect(seedVersion.outcome).toBe(\"created\")\n\n // Identical rows in a different order are the same snapshot content.\n const identicalWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await identicalWrite.writeRows([\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n ])\n const identicalVersion = await identicalWrite.commit()\n\n expect(identicalVersion.outcome).toBe(\"unchanged\")\n expect(identicalVersion.versionId).toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: seedVersion.versionId,\n })\n\n await Bun.sleep(2)\n\n const changedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await changedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Hopper\" },\n ])\n const changedVersion = await changedWrite.commit()\n\n expect(changedVersion.outcome).toBe(\"created\")\n expect(changedVersion.versionId).not.toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([changedVersion.versionId, seedVersion.versionId])\n })\n })\n\n test(\"snapshot content comparison respects row multiplicities\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const rowA = { orderId: \"ord_1\", customerName: \"Ada\" }\n const rowB = { orderId: \"ord_2\", customerName: \"Grace\" }\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([rowA, rowA, rowB])\n const seedVersion = await seedWrite.commit()\n\n await Bun.sleep(2)\n\n // Same distinct rows and row count, but different duplicate counts:\n // this is new content, not a no-op.\n const shiftedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await shiftedWrite.writeRows([rowA, rowB, rowB])\n const shiftedVersion = await shiftedWrite.commit()\n\n expect(shiftedVersion.outcome).toBe(\"created\")\n expect(shiftedVersion.versionId).not.toBe(seedVersion.versionId)\n })\n })\n\n test(\"treats omitted and null nullable values as the same snapshot content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(nullableWriteDataset)\n\n const seedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await seedWrite.writeRows([{ orderId: \"ord_1\", note: null }])\n const seedVersion = await seedWrite.commit()\n\n const omittedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await omittedWrite.writeRows([{ orderId: \"ord_1\" }])\n const omittedVersion = await omittedWrite.commit()\n\n expect(omittedVersion.outcome).toBe(\"unchanged\")\n expect(omittedVersion.versionId).toBe(seedVersion.versionId)\n })\n })\n\n test(\"reuses the latest version when an append commits zero rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const seedVersion = await seedWrite.commit()\n\n const emptyAppend = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n const appendVersion = await emptyAppend.commit()\n\n expect(appendVersion.outcome).toBe(\"unchanged\")\n expect(appendVersion.versionId).toBe(seedVersion.versionId)\n expect(appendVersion.rowCount).toBe(1)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"fails stale optimistic commits\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const initialVersion = await seedWrite.commit()\n\n const delayedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n await delayedWrite.writeRows([{ orderId: \"ord_2\", customerName: \"Grace\" }])\n\n const competingWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n })\n await competingWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n await competingWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n\n await expect(\n delayedWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n ).rejects.toThrow(\"Optimistic commit failed\")\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n })\n })\n\n test(\"abort closes a write session without committing rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.abort()\n await write.abort()\n\n expect(await storage.getLatestVersion(writeDataset.id)).toBeNull()\n expect(await storage.listVersions(writeDataset.id)).toEqual([])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).rejects.toThrow(\"No committed version found\")\n })\n })\n\n test(\"commit closes a write session and leaves abort idempotent\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.commit()\n await write.abort()\n\n await expect(write.writeRows([])).rejects.toThrow(\"already closed\")\n })\n })\n\n test(\"rejects rows that do not match the dataset schema\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n\n await expect(write.writeRows([{ orderId: \"ord_1\" }])).rejects.toThrow(\n \"missing required column\"\n )\n await expect(\n write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\", unexpected: true } as never])\n ).rejects.toThrow(\"unknown column\")\n await write.abort()\n })\n })\n\n test(\"round-trips exact decimal strings in eager and streaming reads\", async () => {\n await withStorage(async (storage) => {\n const exact = \"9007199254740993.123456789\"\n await storage.createDataset(decimalWriteDataset)\n\n const write = await storage.beginWrite({ dataset: decimalWriteDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: decimalWriteDataset.id }))\n ).resolves.toEqual([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: decimalWriteDataset.id,\n columns: [\"amount\"],\n limit: 1,\n })\n )\n ).resolves.toEqual([{ amount: exact }])\n })\n })\n\n test(\"round-trips fileRef row values\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(fileRefDataset)\n\n const write = await storage.beginWrite({ dataset: fileRefDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: fileRefDataset.id }))\n ).resolves.toEqual([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n })\n })\n })\n })\n}\n\nasync function collectRows(rows: AsyncIterable<DatasetRow>): Promise<DatasetRow[]> {\n const result: DatasetRow[] = []\n for await (const row of rows) {\n result.push(row)\n }\n return result\n}\n",
|
|
19
|
+
"import { describe, expect, test } from \"bun:test\"\nimport type { FileRef } from \"../blob-storage\"\nimport { col, defineDataset } from \"../datasets\"\nimport { LakeStorageError } from \"../lake-storage/errors\"\nimport type { DatasetRow, LakeStorage } from \"../lake-storage/types\"\n\nexport type LakeStorageSchemaEvolutionCapability = \"strict\" | \"addNullableColumns\"\n\nexport interface LakeStorageContractSuiteOptions<TStorage extends LakeStorage = LakeStorage> {\n /** Factory that produces a fresh `LakeStorage` instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n /**\n * Dataset definition update policy supported by the provider. Defaults to\n * `strict`, which allows metadata-only merges but rejects schema evolution.\n */\n readonly schemaEvolution?: LakeStorageSchemaEvolutionCapability\n /**\n * Version id that is syntactically valid for the provider but should not\n * exist. Defaults to a generic id accepted by providers without format\n * restrictions.\n */\n readonly missingVersionId?: string\n}\n\nconst definitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst reorderedDefinitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"customerName\", \"string\"), col(\"orderId\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst keyedDefinitionDataset = defineDataset(\"contract.definitions.keyed_orders\", {\n schema: [col(\"tenantId\", \"string\"), col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n primaryKey: [\"tenantId\", \"orderId\"],\n description: \"Contract keyed orders\",\n})\n\nconst writeDataset = defineDataset(\"contract.writes.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n})\n\nconst nullableWriteDataset = defineDataset(\"contract.writes.nullable_orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"note\", \"string\", { nullable: true })],\n})\n\nconst decimalWriteDataset = defineDataset(\"contract.writes.decimals\", {\n schema: [col(\"id\", \"string\"), col(\"amount\", \"decimal\", { nullable: true })],\n})\n\nconst fileRefDataset = defineDataset(\"contract.files.documents\", {\n schema: [col(\"id\", \"string\"), col(\"attachment\", \"fileRef\", { nullable: true })],\n})\n\nconst invoiceRef: FileRef = {\n blobId: `blob_${\"a\".repeat(64)}`,\n digest: `sha256:${\"a\".repeat(64)}`,\n sizeBytes: 15,\n fileName: \"invoice.txt\",\n mediaType: \"text/plain\",\n logicalPath: \"invoices/invoice.txt\",\n}\n\n/**\n * Runs the shared `LakeStorage` contract against any provider.\n *\n * The suite covers provider-independent Lake semantics: definition\n * materialization and compatibility checks, versioned writes and reads,\n * optimistic commits, unchanged-write detection, write-session lifecycle,\n * and row validation.\n */\nexport function runLakeStorageContractSuite<TStorage extends LakeStorage>(\n label: string,\n options: LakeStorageContractSuiteOptions<TStorage>\n): void {\n const schemaEvolution = options.schemaEvolution ?? \"strict\"\n const missingVersionId = options.missingVersionId ?? \"missing-version\"\n\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n describe(\"dataset definitions\", () => {\n test(\"creates, gets, lists, and reuses dataset definitions\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n\n const created = await storage.createDataset(definitionDataset)\n const repeated = await storage.createDataset(definitionDataset)\n\n expect(created).toEqual(definitionDataset)\n expect(repeated).toEqual(definitionDataset)\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n expect(await storage.getDataset(\"missing.dataset\")).toBeNull()\n expect(await storage.listDatasets()).toEqual([definitionDataset])\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"round-trips keyed definitions through create, get, list, and reuse\", async () => {\n // Regression guard: omitting primaryKey from mergeDatasetDefinition makes reuse lose\n // the key and fails this contract case.\n await withStorage(async (storage) => {\n const created = await storage.createDataset(keyedDefinitionDataset)\n const repeated = await storage.createDataset(keyedDefinitionDataset)\n\n expect(created).toEqual(keyedDefinitionDataset)\n expect(repeated).toEqual(keyedDefinitionDataset)\n expect(await storage.getDataset(keyedDefinitionDataset.id)).toEqual(\n keyedDefinitionDataset\n )\n expect(await storage.listDatasets()).toEqual([keyedDefinitionDataset])\n expect(await storage.listVersions(keyedDefinitionDataset.id)).toEqual([])\n })\n })\n\n test(\"treats same-column declaration reorders as a no-op\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(definitionDataset)\n await storage.assertDatasetDefinitionsCompatible([reorderedDefinitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n await expect(storage.createDataset(reorderedDefinitionDataset)).resolves.toEqual(\n definitionDataset\n )\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"persists compatible metadata additions\", async () => {\n await withStorage(async (storage) => {\n const minimalDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n })\n const documentedDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n partitionBy: [\"orderDate\"],\n description: \"Contract metadata\",\n })\n\n await storage.createDataset(minimalDataset)\n await storage.assertDatasetDefinitionsCompatible([documentedDataset])\n\n expect(await storage.getDataset(minimalDataset.id)).toEqual(minimalDataset)\n await expect(storage.createDataset(documentedDataset)).resolves.toEqual(documentedDataset)\n expect(await storage.getDataset(minimalDataset.id)).toEqual(documentedDataset)\n })\n })\n\n test(\"rejects incompatible definition changes without mutating the stored definition\", async () => {\n await withStorage(async (storage) => {\n const changedDataset = defineDataset(definitionDataset.id, {\n schema: [col(\"orderId\", \"int64\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n })\n\n await storage.createDataset(definitionDataset)\n\n await expect(\n storage.assertDatasetDefinitionsCompatible([changedDataset])\n ).rejects.toThrow(\"changing column 'orderId' type\")\n await expect(storage.createDataset(changedDataset)).rejects.toBeInstanceOf(\n LakeStorageError\n )\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n })\n })\n\n test(\"checks provider schema evolution policy\", async () => {\n await withStorage(async (storage) => {\n const initialDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\")],\n })\n const requestedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"currency\", \"string\", { nullable: true }), col(\"invoiceId\", \"string\")],\n })\n const storedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\"), col(\"currency\", \"string\", { nullable: true })],\n })\n\n await storage.createDataset(initialDataset)\n\n if (schemaEvolution === \"strict\") {\n await expect(\n storage.assertDatasetDefinitionsCompatible([requestedDataset])\n ).rejects.toThrow(\"incompatible schema\")\n await expect(storage.createDataset(requestedDataset)).rejects.toThrow(\n \"incompatible schema\"\n )\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n return\n }\n\n await storage.assertDatasetDefinitionsCompatible([requestedDataset])\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n expect(await storage.listVersions(initialDataset.id)).toEqual([])\n\n await expect(storage.createDataset(requestedDataset)).resolves.toEqual(storedDataset)\n expect(await storage.getDataset(initialDataset.id)).toEqual(storedDataset)\n\n const [schemaVersion] = await storage.listVersions(initialDataset.id)\n expect(schemaVersion).toMatchObject({\n datasetId: initialDataset.id,\n mode: \"schema\",\n schema: storedDataset.schema,\n })\n })\n })\n\n test(\"keeps compatibility checks read-only for missing datasets\", async () => {\n await withStorage(async (storage) => {\n await storage.assertDatasetDefinitionsCompatible([definitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n expect(await storage.listDatasets()).toEqual([])\n })\n })\n })\n\n describe(\"catalog state\", () => {\n test(\"reports materialized state and latest version summaries in bulk\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const commit = await write.commit()\n expect(commit.outcome).toBe(\"created\")\n const version = commit\n\n await storage.createDataset(definitionDataset)\n\n const state = await storage.listDatasetCatalogState([\n writeDataset.id,\n definitionDataset.id,\n \"contract.missing.dataset\",\n ])\n\n const byId = new Map(state.map((entry) => [entry.datasetId, entry]))\n\n expect(byId.get(writeDataset.id)).toMatchObject({\n datasetId: writeDataset.id,\n materialized: true,\n })\n expect(byId.get(writeDataset.id)?.latestVersion).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n // Created without a committed write: materialized, but no version.\n expect(byId.get(definitionDataset.id)).toEqual({\n datasetId: definitionDataset.id,\n materialized: true,\n latestVersion: null,\n })\n\n // Registered but never created.\n expect(byId.get(\"contract.missing.dataset\")).toEqual({\n datasetId: \"contract.missing.dataset\",\n materialized: false,\n latestVersion: null,\n })\n })\n })\n\n test(\"returns an empty result for an empty request\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.listDatasetCatalogState([])).toEqual([])\n })\n })\n })\n\n describe(\"writes and reads\", () => {\n test(\"keeps immutable-version row order and offsets stable\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n const expected = [\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_5\", customerName: \"Margaret\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_4\", customerName: \"Dorothy\" },\n ]\n await write.writeRows(expected)\n const version = await write.commit()\n const pinned = { datasetId: writeDataset.id, versionId: version.versionId }\n\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n for (const offset of [0, 2, expected.length, expected.length + 3]) {\n await expect(collectRows(storage.readRows({ ...pinned, offset }))).resolves.toEqual(\n expected.slice(offset)\n )\n }\n await expect(\n collectRows(storage.readRows({ ...pinned, columns: [\"orderId\"], offset: 1, limit: 2 }))\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_5\" }])\n })\n })\n\n test(\"rejects writes for unknown datasets\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.beginWrite({ dataset: writeDataset })).rejects.toThrow(\n \"Unknown dataset\"\n )\n })\n })\n\n test(\"commits snapshot and append versions with versioned reads\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const snapshotWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n })\n await snapshotWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const snapshotCommit = await snapshotWrite.commit({ commitMessage: \"snapshot orders\" })\n expect(snapshotCommit.outcome).toBe(\"created\")\n const version1 = snapshotCommit\n\n expect(version1).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"snapshot\",\n schema: writeDataset.schema,\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n rowCount: 2,\n })\n expect(version1.parentVersionId).toBeUndefined()\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version1.versionId,\n })\n expect(await storage.getVersion(writeDataset.id, version1.versionId)).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version1.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n await Bun.sleep(2)\n\n const appendWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n })\n await appendWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n const appendCommit = await appendWrite.commit({\n expectedLatestVersionId: version1.versionId,\n })\n expect(appendCommit.outcome).toBe(\"created\")\n const version2 = appendCommit\n\n expect(version2).toMatchObject({\n datasetId: writeDataset.id,\n parentVersionId: version1.versionId,\n mode: \"append\",\n schema: writeDataset.schema,\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n rowCount: 3,\n })\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version2.versionId,\n })\n\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: version1.versionId })\n )\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 2,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 1,\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }, { orderId: \"ord_3\" }])\n\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([version2.versionId, version1.versionId])\n expect(\n (await storage.listVersions(writeDataset.id, 1)).map((version) => version.versionId)\n ).toEqual([version2.versionId])\n expect(await storage.listVersions(\"missing.dataset\")).toEqual([])\n expect(await storage.getLatestVersion(\"missing.dataset\")).toBeNull()\n expect(await storage.getVersion(writeDataset.id, missingVersionId)).toBeNull()\n })\n })\n\n test(\"creates an initial empty snapshot version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n const version = await write.commit()\n\n expect(version).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"snapshot\",\n outcome: \"created\",\n rowCount: 0,\n })\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version.versionId,\n })\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n\n const repeatedWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n const repeatedVersion = await repeatedWrite.commit()\n expect(repeatedVersion.outcome).toBe(\"unchanged\")\n expect(repeatedVersion.versionId).toBe(version.versionId)\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([])\n })\n })\n\n test(\"creates an initial empty append version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n const version = await write.commit()\n\n expect(version).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"append\",\n outcome: \"created\",\n })\n expect(version.parentVersionId).toBeUndefined()\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version.versionId,\n })\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([])\n })\n })\n\n test(\"snapshot writes replace the visible latest rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const firstWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await firstWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const firstVersion = await firstWrite.commit()\n\n const replacementWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await replacementWrite.writeRows([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n const replacementVersion = await replacementWrite.commit()\n\n expect(replacementVersion.versionId).not.toBe(firstVersion.versionId)\n expect(replacementVersion.parentVersionId).toBeUndefined()\n expect(replacementVersion.rowCount).toBe(1)\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: firstVersion.versionId })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"reuses the latest version when a snapshot commits identical content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const seedVersion = await seedWrite.commit()\n expect(seedVersion.outcome).toBe(\"created\")\n\n // Identical rows in a different order are the same snapshot content.\n const identicalWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await identicalWrite.writeRows([\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n ])\n const identicalVersion = await identicalWrite.commit()\n\n expect(identicalVersion.outcome).toBe(\"unchanged\")\n expect(identicalVersion.versionId).toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: seedVersion.versionId,\n })\n\n await Bun.sleep(2)\n\n const changedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await changedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Hopper\" },\n ])\n const changedVersion = await changedWrite.commit()\n\n expect(changedVersion.outcome).toBe(\"created\")\n expect(changedVersion.versionId).not.toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([changedVersion.versionId, seedVersion.versionId])\n })\n })\n\n test(\"snapshot content comparison respects row multiplicities\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const rowA = { orderId: \"ord_1\", customerName: \"Ada\" }\n const rowB = { orderId: \"ord_2\", customerName: \"Grace\" }\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([rowA, rowA, rowB])\n const seedVersion = await seedWrite.commit()\n\n await Bun.sleep(2)\n\n // Same distinct rows and row count, but different duplicate counts:\n // this is new content, not a no-op.\n const shiftedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await shiftedWrite.writeRows([rowA, rowB, rowB])\n const shiftedVersion = await shiftedWrite.commit()\n\n expect(shiftedVersion.outcome).toBe(\"created\")\n expect(shiftedVersion.versionId).not.toBe(seedVersion.versionId)\n })\n })\n\n test(\"treats omitted and null nullable values as the same snapshot content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(nullableWriteDataset)\n\n const seedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await seedWrite.writeRows([{ orderId: \"ord_1\", note: null }])\n const seedVersion = await seedWrite.commit()\n\n const omittedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await omittedWrite.writeRows([{ orderId: \"ord_1\" }])\n const omittedVersion = await omittedWrite.commit()\n\n expect(omittedVersion.outcome).toBe(\"unchanged\")\n expect(omittedVersion.versionId).toBe(seedVersion.versionId)\n })\n })\n\n test(\"reuses the latest version when an append commits zero rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const seedVersion = await seedWrite.commit()\n\n const emptyAppend = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n const appendVersion = await emptyAppend.commit()\n\n expect(appendVersion.outcome).toBe(\"unchanged\")\n expect(appendVersion.versionId).toBe(seedVersion.versionId)\n expect(appendVersion.rowCount).toBe(1)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"fails stale optimistic commits\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const initialVersion = await seedWrite.commit()\n\n const delayedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n await delayedWrite.writeRows([{ orderId: \"ord_2\", customerName: \"Grace\" }])\n\n const competingWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n })\n await competingWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n await competingWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n\n await expect(\n delayedWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n ).rejects.toThrow(\"Optimistic commit failed\")\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n })\n })\n\n test(\"abort closes a write session without committing rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.abort()\n await write.abort()\n\n expect(await storage.getLatestVersion(writeDataset.id)).toBeNull()\n expect(await storage.listVersions(writeDataset.id)).toEqual([])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).rejects.toThrow(\"No committed version found\")\n })\n })\n\n test(\"commit closes a write session and leaves abort idempotent\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.commit()\n await write.abort()\n\n await expect(write.writeRows([])).rejects.toThrow(\"already closed\")\n })\n })\n\n test(\"rejects rows that do not match the dataset schema\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n\n await expect(write.writeRows([{ orderId: \"ord_1\" }])).rejects.toThrow(\n \"missing required column\"\n )\n await expect(\n write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\", unexpected: true } as never])\n ).rejects.toThrow(\"unknown column\")\n await write.abort()\n })\n })\n\n test(\"round-trips exact decimal strings in eager and streaming reads\", async () => {\n await withStorage(async (storage) => {\n const exact = \"9007199254740993.123456789\"\n await storage.createDataset(decimalWriteDataset)\n\n const write = await storage.beginWrite({ dataset: decimalWriteDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: decimalWriteDataset.id }))\n ).resolves.toEqual([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: decimalWriteDataset.id,\n columns: [\"amount\"],\n limit: 1,\n })\n )\n ).resolves.toEqual([{ amount: exact }])\n })\n })\n\n test(\"round-trips fileRef row values\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(fileRefDataset)\n\n const write = await storage.beginWrite({ dataset: fileRefDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: fileRefDataset.id }))\n ).resolves.toEqual([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n })\n })\n })\n })\n}\n\nasync function collectRows(rows: AsyncIterable<DatasetRow>): Promise<DatasetRow[]> {\n const result: DatasetRow[] = []\n for await (const row of rows) {\n result.push(row)\n }\n return result\n}\n",
|
|
20
20
|
"import { describe, expect, test } from \"bun:test\"\nimport { commitExactObject, type OntologyContractStorage } from \"./ontology-contract-fixture\"\n\n/** Stable logical failure points exercised by the provider-independent exact-plan fixture. */\nexport type MaterializationFailureBoundary =\n | \"effective.object.upsert\"\n | \"outbox.insert\"\n | \"finalize\"\n\nexport interface MaterializationFailureContractSuiteOptions<\n TStorage extends OntologyContractStorage = OntologyContractStorage,\n TSnapshot = unknown,\n> {\n /** Factory that returns an isolated, transaction-capable storage facade for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional provider setup invoked after the storage facade is created. */\n readonly setup?: (storage: TStorage) => void | Promise<void>\n /** Optional provider cleanup invoked after every test, including failed tests. */\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n /** Captures every provider state that must participate in materialization rollback. */\n readonly captureState: (storage: TStorage) => TSnapshot | Promise<TSnapshot>\n /** Arms one logical write boundary to throw the supplied failure. */\n readonly injectFailure: (\n storage: TStorage,\n boundary: MaterializationFailureBoundary,\n failure: Error\n ) => void | Promise<void>\n /** Clears provider hooks after an injected attempt. */\n readonly clearFailure?: (storage: TStorage) => void | Promise<void>\n /** Providers may omit a boundary only when their test adapter cannot expose it. */\n readonly boundaries?: readonly MaterializationFailureBoundary[]\n}\n\n/**\n * Verifies that failures in the exact-plan write path leave no partial object,\n * commit, or outbox state. The suite is opt-in because production adapters do\n * not need to expose failure injection.\n */\nexport function runMaterializationFailureContractSuite<\n TStorage extends OntologyContractStorage,\n TSnapshot,\n>(label: string, options: MaterializationFailureContractSuiteOptions<TStorage, TSnapshot>): void {\n const boundaries = options.boundaries ?? [\"effective.object.upsert\", \"outbox.insert\", \"finalize\"]\n\n describe(label, () => {\n for (const boundary of boundaries) {\n test(`rolls back the complete transaction when ${boundary} fails`, async () => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n const before = await options.captureState(storage)\n const failure = new Error(`contract injected ${boundary}`)\n await options.injectFailure(storage, boundary, failure)\n await expect(commitExactObject(storage, `failure-${boundary}`)).rejects.toThrow(\n failure.message\n )\n await options.clearFailure?.(storage)\n expect(await options.captureState(storage)).toEqual(before)\n } finally {\n await options.clearFailure?.(storage)\n await options.cleanup?.(storage)\n }\n })\n }\n })\n}\n",
|
|
21
21
|
"import { createEventId } from \"../materialization/identity\"\nimport type {\n MaterializationPlanHeader,\n MaterializationWorkRecord,\n OntologyMaterializationEvent,\n OntologyStorage,\n} from \"../storage/ontology\"\nimport type { Storage } from \"../storage/types\"\n\nexport interface OntologyContractStorage extends Storage {\n readonly ontology: OntologyStorage\n}\n\nconst emptyChunk = {\n overrides: {\n objects: { upserts: [], deletes: [] },\n links: {\n edges: { upserts: [], deletes: [] },\n slots: { upserts: [], deletes: [] },\n },\n },\n effective: {\n objectUpserts: [],\n objectDeletes: [],\n linkUpserts: [],\n linkDeletes: [],\n },\n timeseries: { pointUpserts: [] },\n outbox: [],\n} as const\n\nexport function contractEditHeader(id: string): MaterializationPlanHeader {\n return {\n commit: {\n projectId: \"contract-project\",\n id,\n idempotencyKey: `runtime:${id}`,\n requestHash: `hash:${id}`,\n executionId: `contract-execution:${id}`,\n origin: { kind: \"runtime\", requestId: id },\n ontologyRevision: \"ontology-contract-revision\",\n intent: { kind: \"edit\", mode: \"atomic\", operationCount: 0 },\n committedAt: CONTRACT_COMMITTED_AT,\n },\n expected: {\n sources: [],\n objects: [],\n links: [],\n linkScopes: [],\n points: [],\n },\n }\n}\n\nexport const CONTRACT_COMMITTED_AT = \"2026-01-02T00:00:00.000Z\"\n\nexport function contractEditResult(commitId: string, eventCount = 0) {\n return {\n kind: \"edit\" as const,\n commitId,\n created: true,\n eventCount,\n committedAt: CONTRACT_COMMITTED_AT,\n outcomes: [],\n changes: { objects: [], links: [] },\n }\n}\n\nexport async function commitEmptyEdit(storage: OntologyContractStorage, id: string): Promise<void> {\n await storage.transaction(async (tx) => {\n const header = contractEditHeader(id)\n await ensureContractExecution(tx, header)\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: { sourceActivations: [], result: contractEditResult(id) },\n })\n })\n}\n\n/**\n * Applies a provider-authored exact object row and matching outbox row. The\n * fixture contains no ontology merge or diff logic; all semantic decisions are\n * already represented by the exact plan.\n */\nexport async function commitExactObject(\n storage: OntologyContractStorage,\n id: string,\n options: {\n readonly primaryId?: string\n readonly omitFinalize?: boolean\n readonly throwAfterFinalize?: boolean\n } = {}\n): Promise<{ readonly eventId: string }> {\n const header = contractEditHeader(id)\n const ref = { objectTypeId: \"ContractDevice\", primaryId: options.primaryId ?? id }\n const row = {\n ref,\n properties: { name: id },\n version: 1,\n createdAt: header.commit.committedAt,\n updatedAt: header.commit.committedAt,\n lastCommitId: id,\n }\n const exactWrite = { row, expected: { ref, exists: false as const } }\n const draft = {\n schemaVersion: 1 as const,\n projectId: header.commit.projectId,\n occurredAt: header.commit.committedAt,\n correlationId: `contract-correlation:${id}`,\n origin: header.commit.origin,\n commitId: id,\n type: \"object.created\" as const,\n topic: \"objects\" as const,\n partitionKey: `${ref.objectTypeId}:${ref.primaryId}`,\n payload: {\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n properties: row.properties,\n propertyChanges: {},\n },\n }\n const eventId = createEventId(header.commit.projectId, id, 0)\n const envelope: OntologyMaterializationEvent = {\n ...draft,\n id: eventId,\n commitOrdinal: 0,\n }\n const work: readonly MaterializationWorkRecord[] = [\n {\n kind: \"plan\",\n recordKey: `plan:${id}`,\n applyPhase: 4,\n sortKey: \"61\",\n item: { kind: \"object-upsert\", value: exactWrite },\n },\n {\n kind: \"event\",\n recordKey: `event:0:${id}`,\n eventKindRank: 0,\n sortKey: \"61\",\n draft,\n },\n ]\n\n await storage.transaction(async (tx) => {\n await ensureContractExecution(tx, header)\n const materializations = tx.ontology.materializations\n const session = await materializations.begin(header)\n await materializations.stageWork({ session, records: work })\n\n const applyRecords = []\n for await (const page of materializations.streamWork({\n session,\n order: \"apply\",\n pageRows: 1,\n })) {\n applyRecords.push(...page.records)\n }\n const objectUpserts = applyRecords.flatMap((record) =>\n record.kind === \"plan\" && record.item.kind === \"object-upsert\" ? [record.item.value] : []\n )\n await materializations.applyChunk({\n session,\n chunk: {\n ...emptyChunk,\n effective: { ...emptyChunk.effective, objectUpserts },\n },\n })\n\n const eventRecords = []\n for await (const page of materializations.streamWork({\n session,\n order: \"event\",\n pageRows: 1,\n })) {\n eventRecords.push(...page.records)\n }\n await materializations.applyChunk({\n session,\n chunk: {\n ...emptyChunk,\n outbox: eventRecords.map((record) => {\n if (record.kind !== \"event\") throw new Error(\"Expected event work record.\")\n return {\n envelope,\n availableAt: header.commit.committedAt,\n createdAt: header.commit.committedAt,\n }\n }),\n },\n })\n if (!options.omitFinalize) {\n await materializations.finalize({\n session,\n finalization: { sourceActivations: [], result: contractEditResult(id, 1) },\n })\n }\n if (options.throwAfterFinalize) throw new Error(\"contract rollback\")\n })\n\n return { eventId }\n}\n\nexport async function ensureContractExecution(\n storage: Pick<Storage, \"executions\">,\n header: MaterializationPlanHeader\n): Promise<void> {\n if (\n await storage.executions.getById({\n projectId: header.commit.projectId,\n id: header.commit.executionId,\n })\n ) {\n return\n }\n await storage.executions.create({\n id: header.commit.executionId,\n projectId: header.commit.projectId,\n executor: { type: \"request\", requestId: `contract-request:${header.commit.id}` },\n source: { type: \"http\", requestId: `contract-request:${header.commit.id}` },\n correlationId: `contract-correlation:${header.commit.id}`,\n authorizationRef: { type: \"disabled\" },\n })\n}\n",
|
|
22
22
|
"import { expect, test } from \"bun:test\"\nimport {\n col,\n type DatasetDefinition,\n defineDataset,\n defineObjectType,\n defineProjection,\n link,\n OntologyRegistry,\n prop,\n type Storage,\n} from \"..\"\nimport type { TrustedPrimitiveRef } from \"../execution\"\nimport { restoreTrustedPrimitiveExecutionScope } from \"../execution/durable\"\nimport { createTestingScope } from \"../execution/scopes\"\nimport type { OntologyMaterializer } from \"../materializer\"\nimport {\n createOntologyMaterializer,\n type OntologyEditOperation,\n ProjectionRegistry,\n type ProjectionSourceEntry,\n} from \"../materializer\"\nimport type { ActionRunStorage, ProjectionRunStorage } from \"../storage\"\nimport { createTestActionExecution, queueTestActionRun } from \"./action-execution\"\nimport { createTestProjectionExecution, startTestProjectionRun } from \"./projection-execution\"\n\nexport interface MaterializerStorageContractProvider<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\ntype ContractStorage = Storage & {\n readonly actionRuns: ActionRunStorage\n readonly projectionRuns: ProjectionRunStorage\n}\n\nconst Device = defineObjectType({\n id: \"StorageContractDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"parent\", { cardinality: \"one\" })],\n})\n\nconst devices = defineDataset(\"storage_contract_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"parent_id\", \"string\", { nullable: true }),\n ],\n})\nconst readings = defineDataset(\"storage_contract_readings\", {\n schema: [col(\"device_id\", \"string\"), col(\"at\", \"timestamp\"), col(\"value\", \"float64\")],\n})\nconst ConflictDevice = defineObjectType({\n id: \"StorageContractConflictDevice\",\n name: \"Conflict device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"state\", \"string\", { required: true }),\n ],\n})\nconst conflictDevices = defineDataset(\"storage_contract_conflict_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"state\", \"string\"),\n col(\"updated_at\", \"timestamp\"),\n ],\n})\nconst deviceProjection = defineProjection(\"storage_contract_devices\", Device)\n .fromDataset(devices)\n .properties({ id: \"id\", name: \"name\" })\n .withLinks({\n parent: {\n link: Device.l.parent,\n sourceField: \"parent_id\",\n target: Device,\n },\n })\nconst temperatureProjection = defineProjection(\n \"storage_contract_temperatures\",\n Device.p.temperature\n)\n .fromDataset(readings)\n .points({ objectId: \"device_id\", at: \"at\", value: \"value\" })\nconst conflictDeviceProjection = defineProjection(\n \"storage_contract_conflict_devices\",\n ConflictDevice\n)\n .fromDataset(conflictDevices)\n .properties({ id: \"id\", name: \"name\", state: \"state\" })\n .resolveConflicts({ strategy: \"mostRecent\", sourceTimestamp: \"updated_at\" })\n\nconst ontology = new OntologyRegistry({ sources: [Device, ConflictDevice] })\nconst projections = new ProjectionRegistry({\n projections: [deviceProjection, temperatureProjection, conflictDeviceProjection],\n ontology,\n datasetsById: new Map<string, DatasetDefinition>([\n [devices.id, devices],\n [readings.id, readings],\n [conflictDevices.id, conflictDevices],\n ]),\n})\n\nexport function runMaterializerStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: MaterializerStorageContractProvider<TStorage>\n): void {\n test(`${name} persists replacement, Action, and telemetry commits atomically`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `storage-contract-candidate-${++materializationOrdinal}`,\n },\n })\n try {\n const firstVersion = {\n datasetId: devices.id,\n versionId: \"v1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n }\n const firstExecution = await claim(storage, {\n runId: \"replacement-v1\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: firstVersion,\n })\n const firstMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v1\"\n )\n const first = await firstMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: firstVersion,\n execution: firstExecution,\n entries: entries([sourceEntry(\"one\", \"One\", \"two\"), sourceEntry(\"two\", \"Two\")]),\n })\n expect(first.counts).toMatchObject({ objectsCreated: 2, linksCreated: 1 })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"One\" }, lastCommitId: first.commitId })\n\n const secondVersion = {\n datasetId: devices.id,\n versionId: \"v2\",\n createdAt: \"2026-01-02T00:00:00.000Z\",\n }\n const secondExecution = await claim(storage, {\n runId: \"replacement-v2\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: secondVersion,\n })\n const secondMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v2\"\n )\n const second = await secondMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: secondVersion,\n execution: secondExecution,\n entries: entries([sourceEntry(\"one\", \"One updated\")]),\n })\n expect(second.counts).toMatchObject({\n objectsUpdated: 1,\n objectsDeleted: 1,\n linksDeleted: 1,\n })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"two\",\n })\n ).toBeNull()\n\n await createTestActionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n const missingActionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n await expect(\n missingActionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"missing-action-run\" },\n operations: [\n {\n id: \"missing-run-rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Must not persist\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n ).rejects.toThrow(\"missing-action-run\")\n\n await queueTestActionRun(storage, {\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n subject: { kind: \"object\", objectTypeId: Device.id, primaryId: \"one\" },\n params: {},\n idempotencyKey: \"action-run\",\n })\n await storage.actionRuns.start({\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n })\n const actionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"action-run\",\n })\n const actionCommit = await actionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"action-run\" },\n operations: [\n {\n id: \"rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Managed name\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"materializer-storage-contract\",\n origin: { kind: \"action\", actionRunId: \"action-run\" },\n })\n ).toMatchObject({ id: actionCommit.commitId })\n\n const telemetryVersion = {\n datasetId: readings.id,\n versionId: \"readings-v1\",\n createdAt: \"2026-01-03T00:00:00.000Z\",\n }\n await createTestProjectionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n projectionId: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n datasetId: readings.id,\n datasetVersionId: \"missing-readings-run\",\n })\n const missingTelemetryMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n })\n await expect(\n missingTelemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: {\n datasetId: readings.id,\n versionId: \"missing-readings-run\",\n createdAt: \"2026-01-02T12:00:00.000Z\",\n },\n execution: {\n projectionRunId: \"missing-telemetry-run\",\n executionToken: \"missing-execution-token\",\n },\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 20,\n at: \"2026-01-02T13:00:00.000Z\",\n },\n ],\n })\n ).rejects.toThrow(\"missing-telemetry-run\")\n\n const telemetryExecution = await claim(storage, {\n runId: \"telemetry-v1\",\n projectionId: temperatureProjection.id,\n protocol: \"telemetry\",\n datasetVersion: telemetryVersion,\n fixedBatchSize: 1,\n })\n const telemetryMaterializer = await projectionMaterializer(\n materializer,\n storage,\n temperatureProjection.id,\n \"telemetry-v1\"\n )\n const telemetry = await telemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: telemetryVersion,\n execution: telemetryExecution,\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 21.5,\n at: \"2026-01-03T01:00:00.000Z\",\n },\n ],\n })\n expect(telemetry).toMatchObject({ pointsCreated: 1, latestObjectsChanged: 1 })\n expect(\n await storage.timeseries.getLatest({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"one\",\n propertyId: \"temperature\",\n })\n ).toMatchObject({ value: 21.5, lastCommitId: telemetry.commitId })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists per-property Action edit times`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n let now = new Date(\"2026-02-01T00:00:10.000Z\")\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => now,\n materializationId: () => `conflict-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const ref = { objectTypeId: ConflictDevice.id, primaryId: \"one\" }\n const replace = async (\n versionId: string,\n sourceUpdatedAt: string,\n name: string,\n state: string\n ) => {\n const datasetVersion = {\n datasetId: conflictDevices.id,\n versionId,\n createdAt: sourceUpdatedAt,\n }\n const execution = await claim(storage, {\n runId: `conflict-${versionId}`,\n projectionId: conflictDeviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n conflictDeviceProjection.id,\n `conflict-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: conflictDeviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n {\n root: { kind: \"object\", ref },\n assertions: [{ kind: \"object\", ref, properties: { name, state }, sourceUpdatedAt }],\n },\n ]),\n })\n }\n const edit = (requestId: string, propertyId: \"name\" | \"state\", value: string) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [\n {\n id: requestId,\n kind: \"object.patch\",\n ref,\n set: { [propertyId]: value },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n try {\n await replace(\"v1\", \"2026-02-01T00:00:10.000Z\", \"Source A\", \"source-open\")\n\n now = new Date(\"2026-02-01T00:00:11.000Z\")\n await edit(\"conflict-name\", \"name\", \"Action B\")\n now = new Date(\"2026-02-01T00:00:13.000Z\")\n await edit(\"conflict-state\", \"state\", \"action-closed\")\n\n await replace(\"v2\", \"2026-02-01T00:00:12.000Z\", \"Source C\", \"source-changed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: ConflictDevice.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"Source C\", state: \"action-closed\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists cardinality-one edit authority by scope`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `scope-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const linkRef = (targetId: string) => ({\n source: { objectTypeId: Device.id, primaryId: \"document\" },\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n })\n const replace = async (versionId: string, parentId: string) => {\n const datasetVersion = {\n datasetId: devices.id,\n versionId,\n createdAt: `2026-01-0${versionId.slice(1)}T00:00:00.000Z`,\n }\n const execution = await claim(storage, {\n runId: `scope-${versionId}`,\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n `scope-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n sourceEntry(\"document\", \"Document\", parentId),\n sourceEntry(\"rockland\", \"Rockland\"),\n sourceEntry(\"haverstraw\", \"Haverstraw\"),\n ]),\n })\n }\n const edit = (requestId: string, operation: OntologyEditOperation) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [operation],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n const targets = async () =>\n (\n await storage.objects.listLinks({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"document\",\n })\n ).map((row) => row.targetId)\n\n try {\n await replace(\"v1\", \"rockland\")\n await edit(\"scope-set\", {\n id: \"set\",\n kind: \"link.upsert\",\n ref: linkRef(\"rockland\"),\n })\n\n await replace(\"v2\", \"haverstraw\")\n expect(await targets()).toEqual([\"rockland\"])\n\n await edit(\"scope-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"rockland\"),\n })\n expect(await targets()).toEqual([\"haverstraw\"])\n\n await edit(\"scope-clear\", {\n id: \"clear\",\n kind: \"link.delete\",\n ref: linkRef(\"haverstraw\"),\n })\n await replace(\"v3\", \"rockland\")\n expect(await targets()).toEqual([])\n\n await edit(\"scope-clear-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"haverstraw\"),\n })\n expect(await targets()).toEqual([\"rockland\"])\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n}\n\nfunction runtimeScope() {\n return createTestingScope({\n projectId: \"materializer-storage-contract\",\n executionId: \"materializer-storage-contract-runtime-execution\",\n requestId: \"materializer-storage-contract-runtime-request\",\n correlationId: \"materializer-storage-contract-runtime-correlation\",\n })\n}\n\nasync function projectionMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n projectionId: string,\n runId: string\n) {\n return primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: projectionId,\n runId,\n })\n}\n\nasync function primitiveMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n primitive: TrustedPrimitiveRef\n) {\n const run =\n primitive.kind === \"action\"\n ? await storage.actionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n : await storage.projectionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n const executionId = run?.executionId ?? `test_${primitive.kind}_execution:${primitive.runId}`\n const execution = await storage.executions.getById({\n projectId: \"materializer-storage-contract\",\n id: executionId,\n })\n if (!execution) throw new Error(`Test execution '${executionId}' is missing.`)\n return materializer.withScope(restoreTrustedPrimitiveExecutionScope({ execution, primitive }))\n}\n\nfunction requireContractStorage(storage: Storage): ContractStorage {\n if (!storage.actionRuns) {\n throw new Error(\"[Sixb] Materializer storage contract requires Action materialization runs.\")\n }\n if (!storage.projectionRuns) {\n throw new Error(\n \"[Sixb] Materializer storage contract requires projection materialization runs.\"\n )\n }\n return storage as ContractStorage\n}\n\nfunction sourceEntry(id: string, name: string, parentId?: string): ProjectionSourceEntry {\n const ref = { objectTypeId: Device.id, primaryId: id }\n return {\n root: { kind: \"object\", ref },\n assertions: [\n { kind: \"object\", ref, properties: { name } },\n ...(parentId\n ? [\n {\n kind: \"link\" as const,\n ref: {\n source: ref,\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: parentId },\n },\n },\n ]\n : []),\n ],\n }\n}\n\nasync function* entries(values: readonly ProjectionSourceEntry[]) {\n for (const value of values) yield value\n}\n\nasync function claim(\n storage: ContractStorage,\n input: {\n readonly runId: string\n readonly projectionId: string\n readonly protocol: \"replacement\" | \"telemetry\"\n readonly datasetVersion: {\n readonly datasetId: string\n readonly versionId: string\n readonly createdAt: string\n }\n readonly fixedBatchSize?: number\n }\n) {\n const resolved =\n input.protocol === \"replacement\"\n ? projections.resolveSource(input.projectionId)\n : projections.resolveTelemetry(input.projectionId)\n const definition = resolved.definition\n const identityBase = {\n projectionId: input.projectionId,\n datasetVersion: input.datasetVersion,\n ontologyRevision: projections.ontologyRevision,\n projectionRevision: resolved.projectionRevision,\n ownershipHash: resolved.ownershipHash,\n }\n const common = {\n id: input.runId,\n projectId: \"materializer-storage-contract\",\n } as const\n\n if (definition._tag === \"TelemetryProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"telemetry\", protocol: \"telemetry\" },\n target: { objectTypeId: definition.objectTypeId },\n fixedBatchSize: input.fixedBatchSize ?? 1,\n })\n return claim.execution\n }\n\n if (definition._tag === \"LinkProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"link\", protocol: \"replacement\" },\n target: {\n sourceObjectTypeId: definition.sourceObjectTypeId,\n targetObjectTypeId: definition.targetObjectTypeId,\n },\n })\n return claim.execution\n }\n\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"object\", protocol: \"replacement\" },\n target: { objectTypeId: definition.objectTypeId },\n })\n return claim.execution\n}\n",
|
|
23
23
|
"import type { TrustedPrimitiveRef } from \"../execution\"\nimport type {\n ProjectionRunClaim,\n ProjectionRunRecord,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n Storage,\n} from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\ntype ProjectionRunQueueFixtureInput = QueueProjectionRunInput extends infer TInput\n ? TInput extends QueueProjectionRunInput\n ? Omit<TInput, \"executionId\">\n : never\n : never\n\n/** Create the durable execution required by a Projection-run storage fixture. */\nexport async function createTestProjectionExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly projectionId: string\n readonly runId: string\n readonly datasetId: string\n readonly datasetVersionId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_projection_execution:${input.runId}`\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const primitive: TrustedPrimitiveRef = {\n kind: \"projection\",\n id: input.projectionId,\n runId: input.runId,\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: {\n type: \"datasetVersion\",\n datasetId: input.datasetId,\n versionId: input.datasetVersionId,\n },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n return executionId\n}\n\n/** Queue a Projection run with the valid durable execution fixture required by every provider. */\nexport async function queueTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: ProjectionRunQueueFixtureInput\n): Promise<ProjectionRunRecord> {\n if (!storage.projectionRuns)\n throw new Error(\"Projection run storage is not configured for this test.\")\n const executionId = await createTestProjectionExecution(storage.executions, {\n projectId: input.projectId,\n projectionId: input.identity.projectionId,\n runId: input.id,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n return storage.projectionRuns.queue({ ...input, executionId })\n}\n\n/** Start a Projection run after creating its durable execution and queued state. */\nexport async function startTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: StartOrReclaimProjectionRunInput\n): Promise<ProjectionRunClaim> {\n const projectionRuns = storage.projectionRuns\n if (!projectionRuns) throw new Error(\"Projection run storage is not configured for this test.\")\n const { startedAt, ...queuedRun } = input\n await queueTestProjectionRun(storage, { ...queuedRun, queuedAt: startedAt })\n return projectionRuns.startOrReclaim(input)\n}\n\n/** Claim a queued fixture, or rotate its attempt when the same durable run is reclaimed. */\nexport async function claimTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: StartOrReclaimProjectionRunInput\n): Promise<ProjectionRunClaim> {\n if (!storage.projectionRuns)\n throw new Error(\"Projection run storage is not configured for this test.\")\n const existing = await storage.projectionRuns.getById({\n projectId: input.projectId,\n id: input.id,\n })\n if (!existing) {\n const { startedAt, ...queuedRun } = input\n await queueTestProjectionRun(storage, { ...queuedRun, queuedAt: startedAt })\n }\n return storage.projectionRuns.startOrReclaim(input)\n}\n",
|
|
24
|
-
"import { describe, expect, test } from \"bun:test\"\nimport type { JsonValue } from \"../json\"\nimport {\n collectObjectQueryValidationIssues,\n countObjects,\n executeObjectQuery,\n existsObjects,\n facetObjects,\n normalizeObjectQuery,\n type ObjectQuery,\n ObjectQueryPlanningError,\n validateObjectQuery,\n} from \"../objects/query\"\nimport { defineObjectType, link, OntologyRegistry, prop, stringEnum } from \"../ontology\"\nimport type { ObjectStorage, QueryObjectsResult } from \"../storage/objects\"\nimport type { Storage } from \"../storage/types\"\nimport {\n createMaterializerTestFixture,\n type MaterializerFixtureLink,\n type MaterializerFixtureObject,\n type MaterializerTestFixture,\n} from \"./materializer-fixture\"\n\nexport interface ObjectQueryProviderContractSuiteOptions<TStorage extends Storage> {\n /** Factory that produces a fresh complete storage instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"object-query-contract\"\n\nconst Device = defineObjectType({\n id: \"ContractDevice\",\n name: \"Contract Device\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst Room = defineObjectType({\n id: \"ContractRoom\",\n name: \"Contract Room\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"description\", \"string\", {\n query: { searchable: true, text: true },\n }),\n prop(\"floor\", \"string\", {\n nullable: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"capacity\", \"double\", {\n query: { searchable: true, filterable: true, sortable: true },\n }),\n prop(\"occupied\", \"boolean\", {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\"status\", stringEnum([\"active\", \"paused\"]), {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\n \"tags\",\n { type: \"array\", items: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"metadata\",\n { type: \"map\", keySchema: \"string\", valueSchema: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"embedding\",\n { type: \"array\", items: \"double\" },\n { query: { searchable: true, vector: true } }\n ),\n ],\n links: [link(\"hasDevice\", Device)],\n search: {\n defaultText: [\"name\", \"description\"],\n vector: { property: \"embedding\", source: [\"name\", \"description\"] },\n },\n})\n\nconst Zone = defineObjectType({\n id: \"ContractZone\",\n name: \"Contract Zone\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n links: [link(\"hasDevice\", Device)],\n})\n\nconst Asset = defineObjectType({\n id: \"ContractAsset\",\n name: \"Contract Asset\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n})\n\nconst LaptopAsset = defineObjectType({\n id: \"ContractLaptopAsset\",\n name: \"Contract Laptop Asset\",\n extends: Asset,\n properties: [],\n})\n\nconst DefaultTextBase = defineObjectType({\n id: \"ContractDefaultTextBase\",\n name: \"Contract Default Text Base\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"name\", \"string\", { query: { searchable: true, text: true } }),\n prop(\"alias\", \"string\"),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst DefaultTextChild = defineObjectType({\n id: \"ContractDefaultTextChild\",\n name: \"Contract Default Text Child\",\n extends: DefaultTextBase,\n properties: [prop(\"alias\", \"string\", { query: { searchable: true, text: true } })],\n search: { defaultText: [\"alias\"] },\n})\n\nexport const objectQueryContractOntology = new OntologyRegistry({\n sources: [Room, Device, Zone, Asset, LaptopAsset, DefaultTextBase, DefaultTextChild],\n})\n\n/**\n * Runs the shared object-query provider contract against any ObjectStorage.\n *\n * The contract defines the portable V1 query surface: capability declarations,\n * validation/normalization handoff, provider pushdown, bounded fallback,\n * traversal, set operations, pagination, search profile defaults, and stable\n * structured rejections for features outside a provider's capability map.\n */\nexport function runObjectQueryProviderContractSuite<TStorage extends Storage>(\n label: string,\n options: ObjectQueryProviderContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: {\n readonly objects: TStorage[\"objects\"]\n readonly fixture: MaterializerTestFixture\n }) => Promise<void>\n ): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body({\n objects: storage.objects,\n fixture: createMaterializerTestFixture({\n projectId,\n ontology: objectQueryContractOntology,\n storage,\n }),\n })\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"normalizes query shape and resolves search profile defaults\", () => {\n const normalized = normalizeObjectQuery({\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"limit\",\n limit: 3,\n input: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"id\"],\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"name\", \"description\", \"name\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n })\n\n expect(normalized.kind).toBe(\"limit\")\n if (normalized.kind !== \"limit\") return\n expect(normalized.limit).toBe(3)\n expect(normalized.input.kind).toBe(\"project\")\n if (normalized.input.kind !== \"project\") return\n expect(normalized.input.properties).toEqual([\"id\", \"name\"])\n expect(normalized.input.input.kind).toBe(\"text\")\n if (normalized.input.input.kind !== \"text\") return\n expect(normalized.input.input.fields).toEqual([\"name\", \"description\"])\n\n const validated = validateObjectQuery(\n { kind: \"text\", query: \"alpha\", input: { kind: \"start\", objectTypeId: Room.id } },\n { ontology: objectQueryContractOntology }\n )\n expect(validated.query.kind).toBe(\"text\")\n if (validated.query.kind === \"text\") {\n expect(validated.query.fields).toBeUndefined()\n expect(validated.query.fieldsByObjectType).toEqual({\n [Room.id]: [\"name\", \"description\"],\n })\n }\n })\n\n test(\"collects validation failures before provider planning\", () => {\n const issues = collectObjectQueryValidationIssues(\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"missing\", value: \"x\" },\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"capacity\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology }\n )\n\n expect(issues.map((issue) => issue.code)).toEqual(\n expect.arrayContaining([\n \"unknown_property\",\n \"query_field_not_enabled\",\n \"text_field_not_string_like\",\n ])\n )\n })\n\n test(\"declares the portable V1 query capability surface\", async () => {\n await withStorage(async ({ objects: storage }) => {\n const capabilities = storage.queryCapabilities()\n\n expect(capabilities.queryObjects).toBe(true)\n expect(capabilities.countObjects).toBe(true)\n expect(capabilities.existsObjects).toBe(true)\n expect(capabilities.facetObjects).toBe(true)\n for (const node of [\n \"start\",\n \"filter\",\n \"text\",\n \"sort\",\n \"limit\",\n \"page\",\n \"traverse\",\n \"set\",\n \"project\",\n ] as const) {\n expect(capabilities.nodes?.[node]).toBe(true)\n }\n for (const op of [\n \"and\",\n \"or\",\n \"not\",\n \"eq\",\n \"neq\",\n \"lt\",\n \"lte\",\n \"gt\",\n \"gte\",\n \"in\",\n \"exists\",\n \"contains\",\n ] as const) {\n expect(capabilities.predicateOps?.[op]).toBe(true)\n }\n expect(capabilities.sortKinds?.property).toBe(true)\n expect(capabilities.traversalDirections?.outgoing).toBe(true)\n expect(capabilities.traversalDirections?.incoming).toBe(true)\n expect(capabilities.setOps?.union).toBe(true)\n expect(capabilities.setOps?.intersect).toBe(true)\n expect(capabilities.setOps?.subtract).toBe(true)\n })\n })\n\n test(\"pushes down scalar predicates, boolean groups, sorting, limits, and projections\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"capacity\"],\n input: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"eq\", propertyId: \"status\", value: \"active\" },\n { op: \"neq\", propertyId: \"name\", value: \"Gamma Huddle\" },\n { op: \"gte\", propertyId: \"capacity\", value: 10 },\n { op: \"lte\", propertyId: \"capacity\", value: 30 },\n { op: \"in\", propertyId: \"floor\", values: [\"2\"] },\n { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n {\n op: \"or\",\n items: [\n { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n { op: \"contains\", propertyId: \"metadata\", value: \"wing\" },\n ],\n },\n { op: \"not\", item: { op: \"eq\", propertyId: \"id\", value: \"missing\" } },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(result.objects[0]?.properties).toEqual({\n id: \"room-beta\",\n name: \"Beta Lab\",\n capacity: 30,\n })\n expect(result.total).toBe(2)\n expect(result.hasMore).toBe(false)\n })\n })\n\n test(\"matches null, missing, neq, in, and not predicate semantics\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const nullable = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"or\",\n items: [\n { op: \"eq\", propertyId: \"floor\", value: null },\n { op: \"exists\", propertyId: \"floor\", value: false },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notTwoOrNull = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"neq\", propertyId: \"floor\", value: \"2\" },\n { op: \"in\", propertyId: \"floor\", values: [\"1\", null] },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notNullFloor = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"neq\", propertyId: \"floor\", value: null },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notFloorTwo = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"not\", item: { op: \"eq\", propertyId: \"floor\", value: \"2\" } },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(nullable)).toEqual([\"room-missing-floor\", \"room-null-floor\"])\n expect(ids(notTwoOrNull)).toEqual([\"room-gamma\", \"room-null-floor\"])\n expect(ids(notNullFloor)).toEqual([\n \"room-alpha\",\n \"room-beta\",\n \"room-gamma\",\n \"room-missing-floor\",\n ])\n expect(ids(notFloorTwo)).toEqual([\"room-gamma\", \"room-missing-floor\", \"room-null-floor\"])\n })\n })\n\n test(\"keeps page tokens stable when projection hides sorted cursor fields\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const input: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"exists\", propertyId: \"capacity\", value: true },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n const page1 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page2 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, pageToken: page1.nextPageToken, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(page1.plan.mode).toBe(\"pushdown\")\n expect(ids(page1)).toEqual([\"room-beta\", \"room-gamma\"])\n expect(page1.objects.map((row) => row.properties)).toEqual([\n { id: \"room-beta\" },\n { id: \"room-gamma\" },\n ])\n expect(page1.hasMore).toBe(true)\n expect(page1.nextPageToken).toBeTruthy()\n expect(ids(page2)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"omits totals when requested without losing hasMore\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const limited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"page\", pageSize: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const sortedLimited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(limited.plan.mode).toBe(\"pushdown\")\n expect(ids(limited)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(limited.total).toBeUndefined()\n expect(limited.hasMore).toBe(true)\n expect(ids(page)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(page.total).toBeUndefined()\n expect(page.hasMore).toBe(true)\n expect(page.nextPageToken).toBeTruthy()\n expect(ids(sortedLimited)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(sortedLimited.total).toBeUndefined()\n expect(sortedLimited.hasMore).toBe(true)\n })\n })\n\n test(\"counts matching objects without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await countObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await countObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.count).toBe(2)\n expect(limited.count).toBe(5)\n })\n })\n\n test(\"checks existence without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const missing = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"name\", value: \"No Such Room\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await existsObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.exists).toBe(true)\n expect(missing.exists).toBe(false)\n expect(limited.exists).toBe(true)\n })\n })\n\n test(\"plans aggregate operations without outer row-shaping requirements\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n const count = await countObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n const exists = await existsObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(count.plan.mode).toBe(\"pushdown\")\n if (count.plan.mode !== \"pushdown\") return\n expect(count.plan.query.kind).toBe(\"text\")\n expect(count.count).toBe(1)\n expect(exists.plan.mode).toBe(\"pushdown\")\n if (exists.plan.mode !== \"pushdown\") return\n expect(exists.plan.query.kind).toBe(\"text\")\n expect(exists.exists).toBe(true)\n })\n })\n\n test(\"counts matching objects by facetable properties without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const status = await facetObjects(\n {\n projectId,\n query: { kind: \"start\", objectTypeId: Room.id },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await facetObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(status.plan.mode).toBe(\"pushdown\")\n expect(status.facets).toEqual([\n {\n propertyId: \"status\",\n buckets: [\n { value: \"paused\", count: 3 },\n { value: \"active\", count: 2 },\n ],\n },\n {\n propertyId: \"occupied\",\n buckets: [\n { value: false, count: 3 },\n { value: true, count: 2 },\n ],\n },\n ])\n expect(limited.facets).toEqual(status.facets)\n })\n })\n\n test(\"pushes down traversal and set operations\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingRooms = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Room.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingZones = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Zone.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const intersect = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"intersect\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const subtract = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"subtract\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(outgoing.plan.mode).toBe(\"pushdown\")\n expect(incoming.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(outgoing)).toEqual([\"device-projector\", \"device-sensor\"])\n expect(sortedIds(incoming)).toEqual([\"room-alpha\", \"room-beta\", \"zone-one\"])\n expect(incomingRooms.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(incomingRooms)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(sortedIds(incomingZones)).toEqual([\"zone-one\"])\n expect(sortedIds(intersect)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(ids(subtract)).toEqual([\"room-beta\"])\n })\n })\n\n test(\"hydrates expand links identically via pushdown or bounded fallback\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"outgoing\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // A provider that declares expand pushdown hydrates links in-database;\n // otherwise the same links come back through the bounded fallback. Either\n // path must produce identical results.\n const expandMode = storage.queryCapabilities().nodes?.expand ? \"pushdown\" : \"fallback\"\n expect(outgoing.plan.mode).toBe(expandMode)\n expect(expandedIds(outgoing, \"room-alpha\", \"hasDevice\")).toEqual([\"device-projector\"])\n expect(expandedIds(outgoing, \"room-beta\", \"hasDevice\")).toEqual([\"device-sensor\"])\n\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"incoming\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // device-projector is linked from both a Room and a Zone.\n expect(incoming.plan.mode).toBe(expandMode)\n expect(expandedIds(incoming, \"device-projector\", \"hasDevice\")).toEqual([\n \"room-alpha\",\n \"zone-one\",\n ])\n expect(expandedIds(incoming, \"device-sensor\", \"hasDevice\")).toEqual([\"room-beta\"])\n })\n })\n\n test(\"expands includeSubtypes outside storage when the expanded query can push down\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Asset.id, includeSubtypes: true },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(result)).toEqual([\"asset-base\", \"laptop-1\"])\n })\n })\n\n test(\"pushes down basic text search using search profile defaults\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"text\",\n query: \"alpha collaboration\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"scopes search profile defaults by object type for subtype text queries\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await fixture.seed({\n objects: [\n {\n ref: { objectTypeId: DefaultTextBase.id, primaryId: \"default-base\" },\n properties: { id: \"default-base\", name: \"ordinary\", alias: \"secret\" },\n },\n {\n ref: { objectTypeId: DefaultTextChild.id, primaryId: \"default-child\" },\n properties: { id: \"default-child\", name: \"ordinary\", alias: \"secret\" },\n },\n ],\n })\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"text\",\n query: \"secret\",\n input: {\n kind: \"start\",\n objectTypeId: DefaultTextBase.id,\n includeSubtypes: true,\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(result)).toEqual([\"default-child\"])\n })\n })\n\n test(\"executes or rejects relevance sorting according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n if (storage.queryCapabilities().sortKinds?.relevance === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"sort_kind_not_supported\"\n )\n })\n })\n\n test(\"executes or rejects vector search according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"vector\",\n propertyId: \"embedding\",\n vector: [1, 0],\n k: 2,\n input: { kind: \"start\", objectTypeId: Room.id },\n }\n\n if (storage.queryCapabilities().nodes?.vector === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"query_node_not_supported\"\n )\n })\n })\n\n test(\"executes bounded fallback when pushdown is disabled for a safe query\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n )\n\n expect(result.plan.mode).toBe(\"fallback\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n })\n })\n\n test(\"rejects fallback for unsupported query nodes when pushdown is disabled\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n await expectPlanningIssue(\n executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 5,\n input: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n ),\n \"fallback_node_not_supported\"\n )\n })\n })\n })\n}\n\nexport async function seedObjectQueryContractData(fixture: MaterializerTestFixture): Promise<void> {\n await fixture.seed({\n objects: [\n objectSeed(Room.id, \"room-alpha\", {\n id: \"room-alpha\",\n name: \"Alpha Conference\",\n description: \"north alpha collaboration\",\n floor: \"2\",\n capacity: 10,\n occupied: true,\n status: \"active\",\n tags: [\"lab\", \"video\"],\n metadata: { wing: \"north\" },\n embedding: [1, 0],\n }),\n objectSeed(Room.id, \"room-beta\", {\n id: \"room-beta\",\n name: \"Beta Lab\",\n description: \"south beta focus\",\n floor: \"2\",\n capacity: 30,\n occupied: false,\n status: \"active\",\n tags: [\"lab\"],\n metadata: { wing: \"south\" },\n embedding: [0.8, 0.2],\n }),\n objectSeed(Room.id, \"room-gamma\", {\n id: \"room-gamma\",\n name: \"Gamma Huddle\",\n description: \"quiet office\",\n floor: \"1\",\n capacity: 20,\n occupied: true,\n status: \"paused\",\n tags: [\"office\"],\n metadata: { zone: \"quiet\" },\n embedding: [0, 1],\n }),\n objectSeed(Room.id, \"room-null-floor\", {\n id: \"room-null-floor\",\n name: \"Null Floor\",\n description: \"nullable floor fixture\",\n floor: null,\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Room.id, \"room-missing-floor\", {\n id: \"room-missing-floor\",\n name: \"Missing Floor\",\n description: \"missing floor fixture\",\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Device.id, \"device-projector\", {\n id: \"device-projector\",\n name: \"Projector\",\n }),\n objectSeed(Device.id, \"device-sensor\", { id: \"device-sensor\", name: \"Sensor\" }),\n objectSeed(Asset.id, \"asset-base\", { id: \"asset-base\" }),\n objectSeed(LaptopAsset.id, \"laptop-1\", { id: \"laptop-1\" }),\n objectSeed(Zone.id, \"zone-one\", { id: \"zone-one\" }),\n ],\n links: [\n linkSeed(Room.id, \"room-alpha\", \"hasDevice\", Device.id, \"device-projector\"),\n linkSeed(Room.id, \"room-beta\", \"hasDevice\", Device.id, \"device-sensor\"),\n linkSeed(Zone.id, \"zone-one\", \"hasDevice\", Device.id, \"device-projector\"),\n ],\n })\n}\n\nfunction objectSeed(\n objectTypeId: string,\n primaryId: string,\n properties: Record<string, JsonValue>\n): MaterializerFixtureObject {\n return {\n ref: { objectTypeId, primaryId },\n properties,\n }\n}\n\nfunction linkSeed(\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n targetTypeId: string,\n targetId: string\n): MaterializerFixtureLink {\n return {\n ref: {\n source: { objectTypeId: sourceTypeId, primaryId: sourceId },\n linkId,\n target: { objectTypeId: targetTypeId, primaryId: targetId },\n },\n }\n}\n\nfunction ids(result: QueryObjectsResult): string[] {\n return result.objects.map((row) => row.primaryId)\n}\n\n// Sorted primaryIds of the objects hydrated under `linkId` on the parent row.\nfunction expandedIds(result: QueryObjectsResult, parentId: string, linkId: string): string[] {\n const parent = result.objects.find((row) => row.primaryId === parentId)\n if (!parent) throw new Error(`parent row '${parentId}' not found`)\n const value = parent.links?.[linkId]\n if (!Array.isArray(value)) throw new Error(`expected an array of links under '${linkId}'`)\n return value.map((linked) => linked.primaryId).sort()\n}\n\nfunction sortedIds(result: QueryObjectsResult): string[] {\n return [...ids(result)].sort()\n}\n\nfunction withoutQueryPushdown(storage: ObjectStorage): ObjectStorage {\n return new Proxy(storage, {\n get(target, property, receiver) {\n if (property === \"queryCapabilities\") return () => ({ queryObjects: false })\n if (property === \"queryObjects\") return undefined\n\n const value = Reflect.get(target, property, receiver)\n return typeof value === \"function\" ? value.bind(target) : value\n },\n })\n}\n\nasync function expectPlanningIssue(promise: Promise<unknown>, code: string): Promise<void> {\n try {\n await promise\n } catch (error) {\n expect(error).toBeInstanceOf(ObjectQueryPlanningError)\n if (error instanceof ObjectQueryPlanningError) {\n expect(error.issues.map((issue) => issue.code)).toContain(code)\n }\n return\n }\n\n throw new Error(`Expected ObjectQueryPlanningError with code '${code}'`)\n}\n",
|
|
24
|
+
"import { describe, expect, test } from \"bun:test\"\nimport type { JsonValue } from \"../json\"\nimport {\n collectObjectQueryValidationIssues,\n countObjects,\n executeObjectQuery,\n executeObjectQueryLinks,\n existsObjects,\n facetObjects,\n normalizeObjectQuery,\n type ObjectQuery,\n ObjectQueryPlanningError,\n validateObjectQuery,\n} from \"../objects/query\"\nimport { defineObjectType, link, OntologyRegistry, prop, stringEnum } from \"../ontology\"\nimport type { ObjectStorage, QueryObjectsResult } from \"../storage/objects\"\nimport type { Storage } from \"../storage/types\"\nimport {\n createMaterializerTestFixture,\n type MaterializerFixtureLink,\n type MaterializerFixtureObject,\n type MaterializerTestFixture,\n} from \"./materializer-fixture\"\n\nexport interface ObjectQueryProviderContractSuiteOptions<TStorage extends Storage> {\n /** Factory that produces a fresh complete storage instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"object-query-contract\"\n\nconst Device = defineObjectType({\n id: \"ContractDevice\",\n name: \"Contract Device\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst Room = defineObjectType({\n id: \"ContractRoom\",\n name: \"Contract Room\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"description\", \"string\", {\n query: { searchable: true, text: true },\n }),\n prop(\"floor\", \"string\", {\n nullable: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"capacity\", \"double\", {\n query: { searchable: true, filterable: true, sortable: true },\n }),\n prop(\"occupied\", \"boolean\", {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\"status\", stringEnum([\"active\", \"paused\"]), {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\n \"tags\",\n { type: \"array\", items: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"metadata\",\n { type: \"map\", keySchema: \"string\", valueSchema: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"embedding\",\n { type: \"array\", items: \"double\" },\n { query: { searchable: true, vector: true } }\n ),\n ],\n links: [link(\"hasDevice\", Device)],\n search: {\n defaultText: [\"name\", \"description\"],\n vector: { property: \"embedding\", source: [\"name\", \"description\"] },\n },\n})\n\nconst Zone = defineObjectType({\n id: \"ContractZone\",\n name: \"Contract Zone\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n links: [link(\"hasDevice\", Device)],\n})\n\nconst Asset = defineObjectType({\n id: \"ContractAsset\",\n name: \"Contract Asset\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n})\n\nconst LaptopAsset = defineObjectType({\n id: \"ContractLaptopAsset\",\n name: \"Contract Laptop Asset\",\n extends: Asset,\n properties: [],\n})\n\nconst DefaultTextBase = defineObjectType({\n id: \"ContractDefaultTextBase\",\n name: \"Contract Default Text Base\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"name\", \"string\", { query: { searchable: true, text: true } }),\n prop(\"alias\", \"string\"),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst DefaultTextChild = defineObjectType({\n id: \"ContractDefaultTextChild\",\n name: \"Contract Default Text Child\",\n extends: DefaultTextBase,\n properties: [prop(\"alias\", \"string\", { query: { searchable: true, text: true } })],\n search: { defaultText: [\"alias\"] },\n})\n\nexport const objectQueryContractOntology = new OntologyRegistry({\n sources: [Room, Device, Zone, Asset, LaptopAsset, DefaultTextBase, DefaultTextChild],\n})\n\n/**\n * Runs the shared object-query provider contract against any ObjectStorage.\n *\n * The contract defines the portable V1 query surface: capability declarations,\n * validation/normalization handoff, provider pushdown, bounded fallback,\n * canonical reference sets, traversal, set operations, pagination, search profile defaults, and stable\n * structured rejections for features outside a provider's capability map.\n */\nexport function runObjectQueryProviderContractSuite<TStorage extends Storage>(\n label: string,\n options: ObjectQueryProviderContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: {\n readonly objects: TStorage[\"objects\"]\n readonly fixture: MaterializerTestFixture\n }) => Promise<void>\n ): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body({\n objects: storage.objects,\n fixture: createMaterializerTestFixture({\n projectId,\n ontology: objectQueryContractOntology,\n storage,\n }),\n })\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"normalizes query shape and resolves search profile defaults\", () => {\n const normalized = normalizeObjectQuery({\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"limit\",\n limit: 3,\n input: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"id\"],\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"name\", \"description\", \"name\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n })\n\n expect(normalized.kind).toBe(\"limit\")\n if (normalized.kind !== \"limit\") return\n expect(normalized.limit).toBe(3)\n expect(normalized.input.kind).toBe(\"project\")\n if (normalized.input.kind !== \"project\") return\n expect(normalized.input.properties).toEqual([\"id\", \"name\"])\n expect(normalized.input.input.kind).toBe(\"text\")\n if (normalized.input.input.kind !== \"text\") return\n expect(normalized.input.input.fields).toEqual([\"name\", \"description\"])\n\n const validated = validateObjectQuery(\n { kind: \"text\", query: \"alpha\", input: { kind: \"start\", objectTypeId: Room.id } },\n { ontology: objectQueryContractOntology }\n )\n expect(validated.query.kind).toBe(\"text\")\n if (validated.query.kind === \"text\") {\n expect(validated.query.fields).toBeUndefined()\n expect(validated.query.fieldsByObjectType).toEqual({\n [Room.id]: [\"name\", \"description\"],\n })\n }\n })\n\n test(\"collects validation failures before provider planning\", () => {\n const issues = collectObjectQueryValidationIssues(\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"missing\", value: \"x\" },\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"capacity\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology }\n )\n\n expect(issues.map((issue) => issue.code)).toEqual(\n expect.arrayContaining([\n \"unknown_property\",\n \"query_field_not_enabled\",\n \"text_field_not_string_like\",\n ])\n )\n })\n\n test(\"declares the portable V1 query capability surface\", async () => {\n await withStorage(async ({ objects: storage }) => {\n const capabilities = storage.queryCapabilities()\n\n expect(capabilities.queryObjects).toBe(true)\n expect(capabilities.countObjects).toBe(true)\n expect(capabilities.existsObjects).toBe(true)\n expect(capabilities.facetObjects).toBe(true)\n for (const node of [\n \"start\",\n \"filter\",\n \"text\",\n \"sort\",\n \"limit\",\n \"page\",\n \"traverse\",\n \"set\",\n \"project\",\n ] as const) {\n expect(capabilities.nodes?.[node]).toBe(true)\n }\n for (const op of [\n \"and\",\n \"or\",\n \"not\",\n \"eq\",\n \"neq\",\n \"lt\",\n \"lte\",\n \"gt\",\n \"gte\",\n \"in\",\n \"exists\",\n \"contains\",\n ] as const) {\n expect(capabilities.predicateOps?.[op]).toBe(true)\n }\n expect(capabilities.sortKinds?.property).toBe(true)\n expect(capabilities.traversalDirections?.outgoing).toBe(true)\n expect(capabilities.traversalDirections?.incoming).toBe(true)\n expect(capabilities.setOps?.union).toBe(true)\n expect(capabilities.setOps?.intersect).toBe(true)\n expect(capabilities.setOps?.subtract).toBe(true)\n })\n })\n\n test(\"pushes down scalar predicates, boolean groups, sorting, limits, and projections\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"capacity\"],\n input: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"eq\", propertyId: \"status\", value: \"active\" },\n { op: \"neq\", propertyId: \"name\", value: \"Gamma Huddle\" },\n { op: \"gte\", propertyId: \"capacity\", value: 10 },\n { op: \"lte\", propertyId: \"capacity\", value: 30 },\n { op: \"in\", propertyId: \"floor\", values: [\"2\"] },\n { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n {\n op: \"or\",\n items: [\n { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n { op: \"contains\", propertyId: \"metadata\", value: \"wing\" },\n ],\n },\n { op: \"not\", item: { op: \"eq\", propertyId: \"id\", value: \"missing\" } },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(result.objects[0]?.properties).toEqual({\n id: \"room-beta\",\n name: \"Beta Lab\",\n capacity: 30,\n })\n expect(result.total).toBe(2)\n expect(result.hasMore).toBe(false)\n })\n })\n\n test(\"queries opaque ids through canonical exact refs\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n const issue297 = \"github:issue:sixb-ai/sixb#297\"\n const issue298 = \"github:issue:sixb-ai/sixb#298\"\n await fixture.seed({\n objects: [\n objectSeed(Asset.id, issue297, { id: issue297 }),\n objectSeed(Asset.id, issue298, { id: issue298 }),\n ],\n })\n\n const refs = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"refs\",\n refs: [\n { objectTypeId: Asset.id, primaryId: issue298 },\n { objectTypeId: Asset.id, primaryId: issue297 },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // The JSON query body preserves URL-reserved characters without encoding.\n expect(refs.plan.mode).toBe(\n storage.queryCapabilities().nodes?.refs === true ? \"pushdown\" : \"fallback\"\n )\n expect(ids(refs)).toEqual([issue297, issue298])\n })\n })\n\n test(\"executes canonical heterogeneous refs with pagination and projection\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const refs: Extract<ObjectQuery, { kind: \"refs\" }>[\"refs\"] = [\n { objectTypeId: Device.id, primaryId: \"device-sensor\" },\n { objectTypeId: Room.id, primaryId: \"room-gamma\" },\n { objectTypeId: Room.id, primaryId: \"missing\" },\n { objectTypeId: Room.id, primaryId: \"room-alpha\" },\n ]\n const first = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, input: { kind: \"refs\", refs } },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const second = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: {\n kind: \"page\",\n pageSize: 2,\n pageToken: first.nextPageToken,\n input: { kind: \"refs\", refs },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const count = await countObjects(\n { projectId, query: { kind: \"refs\", refs } },\n { ontology: objectQueryContractOntology, storage }\n )\n\n const expectedMode =\n storage.queryCapabilities().nodes?.refs === true ? \"pushdown\" : \"fallback\"\n expect(first.plan.mode).toBe(expectedMode)\n expect(ids(first)).toEqual([\"device-sensor\", \"room-alpha\"])\n expect(first.objects.map((row) => row.properties)).toEqual([\n { id: \"device-sensor\" },\n { id: \"room-alpha\" },\n ])\n expect(first.total).toBe(3)\n expect(first.hasMore).toBe(true)\n expect(first.nextPageToken).toBeTruthy()\n expect(second.plan.mode).toBe(expectedMode)\n expect(ids(second)).toEqual([\"room-gamma\"])\n expect(second.hasMore).toBe(false)\n expect(count.plan.mode).toBe(expectedMode)\n expect(count.count).toBe(3)\n })\n })\n\n test(\"composes refs with traversal in provider pushdown\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n if (storage.queryCapabilities().nodes?.refs !== true) return\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: {\n kind: \"refs\",\n refs: [{ objectTypeId: Room.id, primaryId: \"room-alpha\" }],\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"device-projector\"])\n })\n })\n\n test(\"queries and paginates incident links over a provider-backed object set\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"refs\",\n refs: [{ objectTypeId: Device.id, primaryId: \"device-projector\" }],\n }\n\n const first = await executeObjectQueryLinks(\n {\n projectId,\n query,\n direction: \"incoming\",\n includeObjects: true,\n pageSize: 1,\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const second = await executeObjectQueryLinks(\n {\n projectId,\n query,\n direction: \"incoming\",\n includeObjects: true,\n pageSize: 1,\n pageToken: first.nextPageToken,\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(first.links).toEqual([\n expect.objectContaining({\n sourceTypeId: Room.id,\n sourceId: \"room-alpha\",\n linkId: \"hasDevice\",\n targetTypeId: Device.id,\n targetId: \"device-projector\",\n }),\n ])\n expect(first.objects.map((row) => row.primaryId)).toEqual([\n \"device-projector\",\n \"room-alpha\",\n ])\n expect(first.hasMore).toBe(true)\n expect(first.nextPageToken).toBeTruthy()\n expect(second.links).toEqual([\n expect.objectContaining({\n sourceTypeId: Zone.id,\n sourceId: \"zone-one\",\n linkId: \"hasDevice\",\n targetTypeId: Device.id,\n targetId: \"device-projector\",\n }),\n ])\n expect(second.objects.map((row) => row.primaryId)).toEqual([\"device-projector\", \"zone-one\"])\n expect(second.hasMore).toBe(false)\n })\n })\n\n test(\"does not admit a provider page probe into the link selector\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQueryLinks(\n {\n projectId,\n query: {\n kind: \"page\",\n pageSize: 1,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n direction: \"outgoing\",\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.links).toEqual([\n expect.objectContaining({ sourceId: \"room-alpha\", targetId: \"device-projector\" }),\n ])\n })\n })\n\n test(\"matches null, missing, neq, in, and not predicate semantics\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const nullable = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"or\",\n items: [\n { op: \"eq\", propertyId: \"floor\", value: null },\n { op: \"exists\", propertyId: \"floor\", value: false },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notTwoOrNull = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"neq\", propertyId: \"floor\", value: \"2\" },\n { op: \"in\", propertyId: \"floor\", values: [\"1\", null] },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notNullFloor = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"neq\", propertyId: \"floor\", value: null },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notFloorTwo = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"not\", item: { op: \"eq\", propertyId: \"floor\", value: \"2\" } },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(nullable)).toEqual([\"room-missing-floor\", \"room-null-floor\"])\n expect(ids(notTwoOrNull)).toEqual([\"room-gamma\", \"room-null-floor\"])\n expect(ids(notNullFloor)).toEqual([\n \"room-alpha\",\n \"room-beta\",\n \"room-gamma\",\n \"room-missing-floor\",\n ])\n expect(ids(notFloorTwo)).toEqual([\"room-gamma\", \"room-missing-floor\", \"room-null-floor\"])\n })\n })\n\n test(\"keeps page tokens stable when projection hides sorted cursor fields\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const input: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"exists\", propertyId: \"capacity\", value: true },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n const page1 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page2 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, pageToken: page1.nextPageToken, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(page1.plan.mode).toBe(\"pushdown\")\n expect(ids(page1)).toEqual([\"room-beta\", \"room-gamma\"])\n expect(page1.objects.map((row) => row.properties)).toEqual([\n { id: \"room-beta\" },\n { id: \"room-gamma\" },\n ])\n expect(page1.hasMore).toBe(true)\n expect(page1.nextPageToken).toBeTruthy()\n expect(ids(page2)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"omits totals when requested without losing hasMore\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const limited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"page\", pageSize: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const sortedLimited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(limited.plan.mode).toBe(\"pushdown\")\n expect(ids(limited)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(limited.total).toBeUndefined()\n expect(limited.hasMore).toBe(true)\n expect(ids(page)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(page.total).toBeUndefined()\n expect(page.hasMore).toBe(true)\n expect(page.nextPageToken).toBeTruthy()\n expect(ids(sortedLimited)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(sortedLimited.total).toBeUndefined()\n expect(sortedLimited.hasMore).toBe(true)\n })\n })\n\n test(\"counts matching objects without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await countObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await countObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.count).toBe(2)\n expect(limited.count).toBe(5)\n })\n })\n\n test(\"checks existence without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const missing = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"name\", value: \"No Such Room\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await existsObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.exists).toBe(true)\n expect(missing.exists).toBe(false)\n expect(limited.exists).toBe(true)\n })\n })\n\n test(\"plans aggregate operations without outer row-shaping requirements\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n const count = await countObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n const exists = await existsObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(count.plan.mode).toBe(\"pushdown\")\n if (count.plan.mode !== \"pushdown\") return\n expect(count.plan.query.kind).toBe(\"text\")\n expect(count.count).toBe(1)\n expect(exists.plan.mode).toBe(\"pushdown\")\n if (exists.plan.mode !== \"pushdown\") return\n expect(exists.plan.query.kind).toBe(\"text\")\n expect(exists.exists).toBe(true)\n })\n })\n\n test(\"counts matching objects by facetable properties without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const status = await facetObjects(\n {\n projectId,\n query: { kind: \"start\", objectTypeId: Room.id },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await facetObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(status.plan.mode).toBe(\"pushdown\")\n expect(status.facets).toEqual([\n {\n propertyId: \"status\",\n buckets: [\n { value: \"paused\", count: 3 },\n { value: \"active\", count: 2 },\n ],\n },\n {\n propertyId: \"occupied\",\n buckets: [\n { value: false, count: 3 },\n { value: true, count: 2 },\n ],\n },\n ])\n expect(limited.facets).toEqual(status.facets)\n })\n })\n\n test(\"pushes down traversal and set operations\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingRooms = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Room.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingZones = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Zone.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const intersect = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"intersect\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const subtract = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"subtract\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(outgoing.plan.mode).toBe(\"pushdown\")\n expect(incoming.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(outgoing)).toEqual([\"device-projector\", \"device-sensor\"])\n expect(sortedIds(incoming)).toEqual([\"room-alpha\", \"room-beta\", \"zone-one\"])\n expect(incomingRooms.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(incomingRooms)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(sortedIds(incomingZones)).toEqual([\"zone-one\"])\n expect(sortedIds(intersect)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(ids(subtract)).toEqual([\"room-beta\"])\n })\n })\n\n test(\"hydrates expand links identically via pushdown or bounded fallback\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"outgoing\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // A provider that declares expand pushdown hydrates links in-database;\n // otherwise the same links come back through the bounded fallback. Either\n // path must produce identical results.\n const expandMode = storage.queryCapabilities().nodes?.expand ? \"pushdown\" : \"fallback\"\n expect(outgoing.plan.mode).toBe(expandMode)\n expect(expandedIds(outgoing, \"room-alpha\", \"hasDevice\")).toEqual([\"device-projector\"])\n expect(expandedIds(outgoing, \"room-beta\", \"hasDevice\")).toEqual([\"device-sensor\"])\n\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"incoming\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // device-projector is linked from both a Room and a Zone.\n expect(incoming.plan.mode).toBe(expandMode)\n expect(expandedIds(incoming, \"device-projector\", \"hasDevice\")).toEqual([\n \"room-alpha\",\n \"zone-one\",\n ])\n expect(expandedIds(incoming, \"device-sensor\", \"hasDevice\")).toEqual([\"room-beta\"])\n })\n })\n\n test(\"expands includeSubtypes outside storage when the expanded query can push down\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Asset.id, includeSubtypes: true },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(result)).toEqual([\"asset-base\", \"laptop-1\"])\n })\n })\n\n test(\"pushes down basic text search using search profile defaults\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"text\",\n query: \"alpha collaboration\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"scopes search profile defaults by object type for subtype text queries\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await fixture.seed({\n objects: [\n {\n ref: { objectTypeId: DefaultTextBase.id, primaryId: \"default-base\" },\n properties: { id: \"default-base\", name: \"ordinary\", alias: \"secret\" },\n },\n {\n ref: { objectTypeId: DefaultTextChild.id, primaryId: \"default-child\" },\n properties: { id: \"default-child\", name: \"ordinary\", alias: \"secret\" },\n },\n ],\n })\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"text\",\n query: \"secret\",\n input: {\n kind: \"start\",\n objectTypeId: DefaultTextBase.id,\n includeSubtypes: true,\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(result)).toEqual([\"default-child\"])\n })\n })\n\n test(\"executes or rejects relevance sorting according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n if (storage.queryCapabilities().sortKinds?.relevance === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"sort_kind_not_supported\"\n )\n })\n })\n\n test(\"executes or rejects vector search according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"vector\",\n propertyId: \"embedding\",\n vector: [1, 0],\n k: 2,\n input: { kind: \"start\", objectTypeId: Room.id },\n }\n\n if (storage.queryCapabilities().nodes?.vector === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"query_node_not_supported\"\n )\n })\n })\n\n test(\"executes bounded fallback when pushdown is disabled for a safe query\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n )\n\n expect(result.plan.mode).toBe(\"fallback\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n })\n })\n\n test(\"rejects fallback for unsupported query nodes when pushdown is disabled\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n await expectPlanningIssue(\n executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 5,\n input: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n ),\n \"fallback_node_not_supported\"\n )\n })\n })\n })\n}\n\nexport async function seedObjectQueryContractData(fixture: MaterializerTestFixture): Promise<void> {\n await fixture.seed({\n objects: [\n objectSeed(Room.id, \"room-alpha\", {\n id: \"room-alpha\",\n name: \"Alpha Conference\",\n description: \"north alpha collaboration\",\n floor: \"2\",\n capacity: 10,\n occupied: true,\n status: \"active\",\n tags: [\"lab\", \"video\"],\n metadata: { wing: \"north\" },\n embedding: [1, 0],\n }),\n objectSeed(Room.id, \"room-beta\", {\n id: \"room-beta\",\n name: \"Beta Lab\",\n description: \"south beta focus\",\n floor: \"2\",\n capacity: 30,\n occupied: false,\n status: \"active\",\n tags: [\"lab\"],\n metadata: { wing: \"south\" },\n embedding: [0.8, 0.2],\n }),\n objectSeed(Room.id, \"room-gamma\", {\n id: \"room-gamma\",\n name: \"Gamma Huddle\",\n description: \"quiet office\",\n floor: \"1\",\n capacity: 20,\n occupied: true,\n status: \"paused\",\n tags: [\"office\"],\n metadata: { zone: \"quiet\" },\n embedding: [0, 1],\n }),\n objectSeed(Room.id, \"room-null-floor\", {\n id: \"room-null-floor\",\n name: \"Null Floor\",\n description: \"nullable floor fixture\",\n floor: null,\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Room.id, \"room-missing-floor\", {\n id: \"room-missing-floor\",\n name: \"Missing Floor\",\n description: \"missing floor fixture\",\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Device.id, \"device-projector\", {\n id: \"device-projector\",\n name: \"Projector\",\n }),\n objectSeed(Device.id, \"device-sensor\", { id: \"device-sensor\", name: \"Sensor\" }),\n objectSeed(Asset.id, \"asset-base\", { id: \"asset-base\" }),\n objectSeed(LaptopAsset.id, \"laptop-1\", { id: \"laptop-1\" }),\n objectSeed(Zone.id, \"zone-one\", { id: \"zone-one\" }),\n ],\n links: [\n linkSeed(Room.id, \"room-alpha\", \"hasDevice\", Device.id, \"device-projector\"),\n linkSeed(Room.id, \"room-beta\", \"hasDevice\", Device.id, \"device-sensor\"),\n linkSeed(Zone.id, \"zone-one\", \"hasDevice\", Device.id, \"device-projector\"),\n ],\n })\n}\n\nfunction objectSeed(\n objectTypeId: string,\n primaryId: string,\n properties: Record<string, JsonValue>\n): MaterializerFixtureObject {\n return {\n ref: { objectTypeId, primaryId },\n properties,\n }\n}\n\nfunction linkSeed(\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n targetTypeId: string,\n targetId: string\n): MaterializerFixtureLink {\n return {\n ref: {\n source: { objectTypeId: sourceTypeId, primaryId: sourceId },\n linkId,\n target: { objectTypeId: targetTypeId, primaryId: targetId },\n },\n }\n}\n\nfunction ids(result: QueryObjectsResult): string[] {\n return result.objects.map((row) => row.primaryId)\n}\n\n// Sorted primaryIds of the objects hydrated under `linkId` on the parent row.\nfunction expandedIds(result: QueryObjectsResult, parentId: string, linkId: string): string[] {\n const parent = result.objects.find((row) => row.primaryId === parentId)\n if (!parent) throw new Error(`parent row '${parentId}' not found`)\n const value = parent.links?.[linkId]\n if (!Array.isArray(value)) throw new Error(`expected an array of links under '${linkId}'`)\n return value.map((linked) => linked.primaryId).sort()\n}\n\nfunction sortedIds(result: QueryObjectsResult): string[] {\n return [...ids(result)].sort()\n}\n\nfunction withoutQueryPushdown(storage: ObjectStorage): ObjectStorage {\n return new Proxy(storage, {\n get(target, property, receiver) {\n if (property === \"queryCapabilities\") return () => ({ queryObjects: false })\n if (property === \"queryObjects\") return undefined\n\n const value = Reflect.get(target, property, receiver)\n return typeof value === \"function\" ? value.bind(target) : value\n },\n })\n}\n\nasync function expectPlanningIssue(promise: Promise<unknown>, code: string): Promise<void> {\n try {\n await promise\n } catch (error) {\n expect(error).toBeInstanceOf(ObjectQueryPlanningError)\n if (error instanceof ObjectQueryPlanningError) {\n expect(error.issues.map((issue) => issue.code)).toContain(code)\n }\n return\n }\n\n throw new Error(`Expected ObjectQueryPlanningError with code '${code}'`)\n}\n",
|
|
25
25
|
"import { describe, expect, test } from \"bun:test\"\nimport type {\n ProjectionExecution,\n ProjectionMaterializationIdentity,\n} from \"../materialization/model\"\nimport type {\n MaterializationPlanFinalization,\n MaterializationPlanHeader,\n MaterializationSession,\n OntologyOutboxFailure,\n OntologySourceRecord,\n} from \"../storage/ontology\"\nimport type { ProjectionRunStorage } from \"../storage/projection-runs\"\nimport {\n commitEmptyEdit,\n commitExactObject,\n contractEditHeader,\n contractEditResult,\n ensureContractExecution,\n type OntologyContractStorage,\n} from \"./ontology-contract-fixture\"\nimport { startTestProjectionRun } from \"./projection-execution\"\n\nexport interface OntologyStorageContractStorage extends OntologyContractStorage {\n readonly projectionRuns: ProjectionRunStorage\n}\n\nexport interface OntologyStorageContractSuiteOptions<\n TStorage extends OntologyStorageContractStorage = OntologyStorageContractStorage,\n> {\n /** Factory that returns a fresh, fully transaction-capable storage facade for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional provider setup invoked after the storage facade is created. */\n readonly setup?: (storage: TStorage) => void | Promise<void>\n /** Optional provider cleanup invoked after every test, including failed tests. */\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst replacementIdentity = (\n versionId: string,\n projectionId = \"contract.devices\"\n): Extract<ProjectionMaterializationIdentity, { readonly projectionKind: \"object\" }> => ({\n projectionId,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId,\n createdAt: `2026-01-${versionId.padStart(2, \"0\")}T00:00:00.000Z`,\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"projection-contract-revision\",\n ownershipHash: \"ownership-contract-hash\",\n})\n\nconst emptyProjectionCounts = {\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n objectsUnchanged: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n linksUnchanged: 0,\n} as const\n\ninterface ReadyCandidate {\n readonly identity: Extract<\n ProjectionMaterializationIdentity,\n { readonly projectionKind: \"object\" }\n >\n readonly execution: ProjectionExecution\n readonly materializationId: string\n readonly source: { readonly projectionId: string }\n readonly executionId: string\n}\n\nfunction ontologyOutboxFailure(message: string): OntologyOutboxFailure {\n return {\n code: \"event.delivery_failed\",\n message,\n retryable: true,\n at: \"2026-01-03T02:00:00.000Z\",\n }\n}\n\n/**\n * Runs provider-level ontology persistence contracts without asking the provider\n * to interpret ontology definitions, edits, or projection rows. Exact plans are\n * supplied directly and the suite checks durable lifecycle, CAS, outbox, and\n * cross-facade transaction behavior.\n */\nexport function runOntologyStorageContractSuite<TStorage extends OntologyStorageContractStorage>(\n label: string,\n options: OntologyStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"stores one authoritative commit and rejects duplicate commit identities\", async () => {\n await withStorage(async (storage) => {\n await commitEmptyEdit(storage, \"commit-one\")\n const stored = await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"commit-one\",\n })\n expect(stored).toMatchObject({\n id: \"commit-one\",\n idempotencyKey: \"runtime:commit-one\",\n requestHash: \"hash:commit-one\",\n result: { commitId: \"commit-one\" },\n })\n expect(\n await storage.ontology.commits.getByIdempotencyKey({\n projectId: \"contract-project\",\n idempotencyKey: \"runtime:commit-one\",\n })\n ).toEqual(stored)\n\n await expect(commitEmptyEdit(storage, \"commit-one\")).rejects.toMatchObject({\n kind: \"idempotency\",\n })\n const divergent = structuredClone(contractEditHeader(\"different-id\"))\n ;(divergent.commit as { idempotencyKey: string }).idempotencyKey = \"runtime:commit-one\"\n ;(divergent.commit as { requestHash: string }).requestHash = \"different-hash\"\n await expect(\n storage.transaction(async (tx) => {\n await ensureContractExecution(tx, divergent)\n await tx.ontology.materializations.begin(divergent)\n })\n ).rejects.toMatchObject({ kind: \"idempotency\" })\n\n const list = await storage.ontology.commits.list({\n projectId: \"contract-project\",\n limit: 1,\n offset: 0,\n })\n expect(list).toMatchObject({ total: 1, hasMore: false })\n expect(list.commits.map((commit) => commit.id)).toEqual([\"commit-one\"])\n })\n })\n\n test(\"rejects an ontology commit whose execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"missing-execution\")\n await expect(\n storage.transaction(async (tx) => {\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(header.commit.id),\n },\n })\n })\n ).rejects.toThrow()\n await expect(\n storage.ontology.commits.getById({\n projectId: header.commit.projectId,\n id: header.commit.id,\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"rejects unfinished sessions and rolls back their authoritative writes\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"session-contract\")\n await expect(storage.ontology.materializations.begin(header)).rejects.toThrow(\n \"active storage transaction\"\n )\n\n await expect(\n commitExactObject(storage, \"unfinished-session\", { omitFinalize: true })\n ).rejects.toThrow(\"unfinished materialization session\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"unfinished-session-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n let leakedSession: MaterializationSession | undefined\n await expect(\n storage.transaction(async (tx) => {\n const leakedHeader = contractEditHeader(\"leaked-session\")\n await ensureContractExecution(tx, leakedHeader)\n leakedSession = await tx.ontology.materializations.begin(leakedHeader)\n })\n ).rejects.toThrow(\"unfinished materialization session\")\n if (!leakedSession) throw new Error(\"Expected an unfinished session handle\")\n const staleSession = leakedSession\n await storage.transaction(async (tx) => {\n await expect(\n tx.ontology.materializations.finalize({\n session: staleSession,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(\"leaked-session\"),\n },\n })\n ).rejects.toThrow(\"inactive\")\n })\n })\n })\n\n test(\"stages insert-only source rows, seals counts, and fences stale execution tokens\", async () => {\n await withStorage(async (storage) => {\n const identity = replacementIdentity(\"01\")\n const claimed = await startTestProjectionRun(storage, {\n id: \"staging-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = claimed.execution\n const source = { projectionId: identity.projectionId }\n await expect(\n storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"mismatched-candidate\",\n execution,\n projectionKind: \"link\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n ).rejects.toThrow(\"identity\")\n await storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n expect(\n await storage.ontology.sources.getActive({ projectId: \"contract-project\", source })\n ).toBeNull()\n\n const row = {\n root: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n },\n assertion: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n properties: { name: \"one\" },\n },\n stagingOrdinal: 0,\n }\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 1, unchanged: 0 })\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 0, unchanged: 1 })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [\n {\n ...row,\n assertion: { ...row.assertion, properties: { name: \"different\" } },\n },\n ],\n })\n ).rejects.toThrow()\n\n const ready = await storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:01:00.000Z\",\n })\n expect(ready).toMatchObject({ status: \"ready\", rootCount: 1, assertionCount: 1 })\n\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: claimed.run.id,\n projectId: claimed.run.projectId,\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [],\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n abandonedAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n const abandoned = await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-01T00:02:00.000Z\",\n })\n expect(abandoned).toMatchObject({ status: \"abandoned\", executionToken: null })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 1, oldestTerminalAt: \"2026-01-01T00:02:00.000Z\" })\n\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 1, materializationsDeleted: 0 })\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 0, materializationsDeleted: 1 })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 0, oldestTerminalAt: null })\n })\n })\n\n test(\"atomically activates explicit empty candidates and rejects competing stale heads\", async () => {\n await withStorage(async (storage) => {\n const first = await createReadyEmptyCandidate(storage, \"run-one\", \"candidate-one\", \"01\")\n await activateEmptyCandidate(\n storage,\n first,\n null,\n \"commit-source-one\",\n \"2026-01-03T00:00:00.000Z\"\n )\n const activeOne = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(activeOne).toMatchObject({\n materializationId: first.materializationId,\n status: \"active\",\n rootCount: 0,\n assertionCount: 0,\n executionToken: null,\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"projection\", projectionRunId: first.execution.projectionRunId },\n })\n ).toMatchObject({ id: \"commit-source-one\" })\n await expect(\n activateEmptyCandidate(\n storage,\n first,\n activeOne,\n \"duplicate-projection-origin\",\n \"2026-01-03T01:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"run-correlation\" })\n\n const left = await createReadyEmptyCandidate(storage, \"run-left\", \"candidate-left\", \"02\")\n const right = await createReadyEmptyCandidate(storage, \"run-right\", \"candidate-right\", \"03\")\n await activateEmptyCandidate(\n storage,\n left,\n activeOne!,\n \"commit-source-left\",\n \"2026-01-04T00:00:00.000Z\"\n )\n await expect(\n activateEmptyCandidate(\n storage,\n right,\n activeOne!,\n \"commit-source-right\",\n \"2026-01-05T00:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"projection-fence\" })\n const currentActive = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(currentActive).toMatchObject({ materializationId: left.materializationId })\n\n const stale = await createReadyEmptyCandidate(\n storage,\n \"run-stale-activation\",\n \"candidate-stale-activation\",\n \"04\"\n )\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: stale.execution.projectionRunId,\n projectId: \"contract-project\",\n identity: stale.identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n activateEmptyCandidate(\n storage,\n stale,\n currentActive,\n \"commit-stale-activation\",\n \"2026-01-06T00:00:00.000Z\"\n )\n ).rejects.toThrow(\"execution token is stale\")\n await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source: stale.source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-06T00:01:00.000Z\",\n })\n\n const cleanup = await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 10,\n })\n expect(cleanup.materializationsDeleted).toBeGreaterThanOrEqual(1)\n expect(\n await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n ).toMatchObject({ materializationId: left.materializationId })\n expect(\n await storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source: right.source,\n materializationId: right.materializationId,\n execution: right.execution,\n abandonedAt: \"2026-02-02T00:00:00.000Z\",\n })\n ).toMatchObject({ status: \"abandoned\" })\n })\n })\n\n test(\"rolls back exact rows, commits, and outbox writes through one transaction facade\", async () => {\n await withStorage(async (storage) => {\n await expect(\n commitExactObject(storage, \"rolled-back\", { throwAfterFinalize: true })\n ).rejects.toThrow(\"contract rollback\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"rollback-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n await commitExactObject(storage, \"committed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n\n await expect(\n commitExactObject(storage, \"stale-object-cas\", { primaryId: \"committed\" })\n ).rejects.toThrow(\"to be absent\")\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"stale-object-cas\",\n })\n ).toBeNull()\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n })\n })\n\n test(\"leases outbox rows exclusively, reclaims expiry, fences stale workers, and purges\", async () => {\n await withStorage(async (storage) => {\n const outboxB = await commitExactObject(storage, \"outbox-b\")\n const outboxA = await commitExactObject(storage, \"outbox-a\")\n await expect(\n storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-02T19:00:00-05:00\",\n limit: 1,\n leaseId: \"noncanonical-lease\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n ).rejects.toThrow(\"canonical UTC\")\n const first = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-one\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(first).toHaveLength(1)\n expect(first[0]).toMatchObject({ attempts: 1, leaseId: \"lease-one\" })\n expect(first[0].envelope.id).toBe([outboxA.eventId, outboxB.eventId].sort()[0])\n const concurrent = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:30:00.000Z\",\n limit: 10,\n leaseId: \"lease-concurrent\",\n leaseExpiresAt: \"2026-01-03T01:30:00.000Z\",\n })\n expect(concurrent).toHaveLength(1)\n expect(concurrent[0].envelope.id).not.toBe(first[0].envelope.id)\n\n const reclaimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-two\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n expect(reclaimed[0].envelope.id).toBe(first[0].envelope.id)\n await expect(\n storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [first[0].envelope.id],\n leaseId: \"lease-one\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n ).rejects.toThrow(\"lease does not match\")\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [reclaimed[0].envelope.id],\n leaseId: \"lease-two\",\n availableAt: \"2026-01-04T00:00:00.000Z\",\n failure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n const retried = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-three\",\n leaseExpiresAt: \"2026-01-04T01:00:00.000Z\",\n })\n expect(retried[0]).toMatchObject({\n attempts: 3,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [retried[0].envelope.id],\n leaseId: \"lease-three\",\n availableAt: \"2026-01-04T00:15:00.000Z\",\n })\n const lifecycleRescheduled = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:15:00.000Z\",\n limit: 1,\n leaseId: \"lease-four\",\n leaseExpiresAt: \"2026-01-04T01:15:00.000Z\",\n })\n expect(lifecycleRescheduled[0]).toMatchObject({\n attempts: 4,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n expect(\n await storage.ontology.outbox.summarize({ projectId: \"contract-project\" })\n ).toMatchObject({ pendingCount: 2, retryingCount: 2, maxAttempts: 4 })\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [lifecycleRescheduled[0].envelope.id],\n leaseId: \"lease-four\",\n publishedAt: \"2026-01-04T00:30:00.000Z\",\n })\n expect(\n await storage.ontology.outbox.purgePublished({\n projectId: \"contract-project\",\n publishedBefore: \"2026-01-05T00:00:00.000Z\",\n limit: 1,\n })\n ).toBe(1)\n })\n })\n\n test(\"keeps batch outbox settlement atomic when callers catch a stale lease\", async () => {\n await withStorage(async (storage) => {\n await commitExactObject(storage, \"lease-atomic-a\")\n await commitExactObject(storage, \"lease-atomic-b\")\n const claimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 10,\n leaseId: \"lease-atomic-old\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(claimed).toHaveLength(2)\n const [reclaimed] = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-atomic-new\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n const untouched = claimed.find((row) => row.envelope.id !== reclaimed!.envelope.id)!\n\n let conflict: unknown\n await storage.transaction(async (tx) => {\n try {\n await tx.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: claimed.map((row) => row.envelope.id),\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n } catch (error) {\n conflict = error\n }\n })\n expect(conflict).toMatchObject({ kind: \"outbox-lease\" })\n\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [untouched.envelope.id],\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:20:00.000Z\",\n })\n })\n })\n\n test(\"rolls back a telemetry checkpoint with its authoritative ontology commit\", async () => {\n await withStorage(async (storage) => {\n const identity: ProjectionMaterializationIdentity = {\n projectionId: \"contract.telemetry\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"telemetry-version\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"telemetry-contract-revision\",\n ownershipHash: \"telemetry-contract-ownership\",\n }\n const run = await startTestProjectionRun(storage, {\n id: \"telemetry-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n fixedBatchSize: 2,\n })\n const execute = async (throwAfter: boolean) => {\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n const header = telemetryHeader(identity, run.run.id, run.run.executionId)\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: {\n kind: \"telemetry\",\n commitId: header.commit.id,\n created: true,\n eventCount: 0,\n committedAt: header.commit.committedAt,\n pointsCreated: 0,\n pointsUpdated: 0,\n pointsUnchanged: 0,\n latestObjectsChanged: 0,\n },\n },\n })\n await tx.projectionRuns.advanceTelemetryCheckpoint({\n id: run.run.id,\n projectId: run.run.projectId,\n identity,\n executionToken: run.execution.executionToken,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 2,\n inputExhausted: true,\n })\n if (throwAfter) throw new Error(\"telemetry rollback\")\n })\n }\n\n await expect(execute(true)).rejects.toThrow(\"telemetry rollback\")\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toBeNull()\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 0, nextRowOffset: 0, inputExhausted: false },\n })\n\n await execute(false)\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toMatchObject({ id: \"telemetry-commit\" })\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 1, nextRowOffset: 2, inputExhausted: true },\n })\n })\n })\n })\n}\n\nasync function createReadyEmptyCandidate(\n storage: OntologyStorageContractStorage,\n runId: string,\n materializationId: string,\n versionId: string\n): Promise<ReadyCandidate> {\n const identity = replacementIdentity(versionId)\n const run = await startTestProjectionRun(storage, {\n id: runId,\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = run.execution\n const source = { projectionId: identity.projectionId }\n await storage.ontology.sources.beginMaterialization({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: identity.datasetVersion.createdAt,\n })\n await storage.ontology.sources.markReady({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n rootCount: 0,\n assertionCount: 0,\n readyAt: new Date(Date.parse(identity.datasetVersion.createdAt) + 1_000).toISOString(),\n })\n return { identity, execution, materializationId, source, executionId: run.run.executionId }\n}\n\nasync function activateEmptyCandidate(\n storage: OntologyStorageContractStorage,\n candidate: ReadyCandidate,\n expectedActive: OntologySourceRecord | null,\n commitId: string,\n committedAt: string\n): Promise<void> {\n const expected = {\n source: candidate.source,\n activeMaterializationId: expectedActive?.materializationId ?? null,\n lastCommitId: expectedActive?.lastCommitId ?? null,\n }\n const header: MaterializationPlanHeader = {\n commit: {\n projectId: \"contract-project\",\n id: commitId,\n idempotencyKey: `projection:${commitId}`,\n requestHash: `hash:${commitId}`,\n executionId: candidate.executionId,\n origin: {\n kind: \"projection\",\n projectionId: candidate.source.projectionId,\n projectionRunId: candidate.execution.projectionRunId,\n datasetId: candidate.identity.datasetVersion.datasetId,\n datasetVersionId: candidate.identity.datasetVersion.versionId,\n },\n ontologyRevision: candidate.identity.ontologyRevision,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n intent: {\n kind: \"projection\",\n source: candidate.source,\n datasetVersion: candidate.identity.datasetVersion,\n },\n committedAt,\n },\n expected: { sources: [expected], objects: [], links: [], linkScopes: [], points: [] },\n }\n const finalization: MaterializationPlanFinalization = {\n sourceActivations: [\n {\n source: candidate.source,\n materializationId: candidate.materializationId,\n execution: candidate.execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: candidate.identity.datasetVersion,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n ontologyRevision: candidate.identity.ontologyRevision,\n expected,\n lastCommitId: commitId,\n updatedAt: committedAt,\n },\n ],\n result: {\n kind: \"projection\",\n commitId,\n created: true,\n eventCount: 0,\n committedAt,\n counts: emptyProjectionCounts,\n },\n }\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n await tx.projectionRuns.lockForMaterialization({\n id: candidate.execution.projectionRunId,\n projectId: header.commit.projectId,\n identity: candidate.identity,\n executionToken: candidate.execution.executionToken,\n })\n const session = await tx.ontology.materializations.begin(header)\n for (const entityKind of [\"object\", \"link\"] as const) {\n for await (const _page of tx.ontology.materializations.streamSourceReplacementState({\n session,\n source: candidate.source,\n candidateMaterializationId: candidate.materializationId,\n entityKind,\n pageRows: 1,\n })) {\n // Empty output intentionally has no classifications or exact writes.\n }\n }\n await tx.ontology.materializations.finalize({ session, finalization })\n })\n}\n\nfunction telemetryHeader(\n identity: ProjectionMaterializationIdentity,\n projectionRunId: string,\n executionId: string\n): MaterializationPlanHeader {\n if (identity.protocol !== \"telemetry\") throw new Error(\"Expected telemetry identity\")\n return {\n commit: {\n projectId: \"contract-project\",\n id: \"telemetry-commit\",\n idempotencyKey: \"telemetry:telemetry-run:0\",\n requestHash: \"hash:telemetry-run:0\",\n executionId,\n origin: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projectionId: identity.projectionId,\n projectionRunId,\n datasetId: identity.datasetVersion.datasetId,\n datasetVersionId: identity.datasetVersion.versionId,\n batchOrdinal: 0,\n },\n },\n ontologyRevision: identity.ontologyRevision,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n intent: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projection: { projectionId: identity.projectionId },\n datasetVersion: identity.datasetVersion,\n batchOrdinal: 0,\n sourceRowCount: 2,\n sourceRowsSkipped: 2,\n inputExhausted: true,\n },\n pointCount: 0,\n inputPointCount: 0,\n },\n committedAt: \"2026-01-02T00:00:00.000Z\",\n },\n expected: { sources: [], objects: [], links: [], linkScopes: [], points: [] },\n }\n}\n",
|
|
26
26
|
"import type { TrustedPrimitiveRef } from \"../execution\"\nimport type { PipelineRunRecord, QueuePipelineRunInput, Storage } from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution required by a Pipeline-run storage fixture. */\nexport async function createTestPipelineExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly pipelineId: string\n readonly runId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_pipeline_execution:${input.runId}`\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const primitive: TrustedPrimitiveRef = {\n kind: \"pipeline\",\n id: input.pipelineId,\n runId: input.runId,\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n return executionId\n}\n\n/** Queue a Pipeline run with the valid durable execution fixture required by every provider. */\nexport async function queueTestPipelineRun(\n storage: Pick<Storage, \"pipelineRuns\" | \"executions\">,\n input: Omit<QueuePipelineRunInput, \"executionId\">\n): Promise<PipelineRunRecord> {\n if (!storage.pipelineRuns)\n throw new Error(\"Pipeline run storage is not configured for this test.\")\n const executionId = await createTestPipelineExecution(storage.executions, {\n projectId: input.projectId,\n pipelineId: input.pipelineId,\n runId: input.id,\n })\n return storage.pipelineRuns.queue({ ...input, executionId })\n}\n\n/** Start a Pipeline run after creating its durable execution and queued state. */\nexport async function startTestPipelineRun(\n storage: Pick<Storage, \"pipelineRuns\" | \"executions\">,\n input: Omit<QueuePipelineRunInput, \"executionId\" | \"queuedAt\"> & {\n readonly startedAt?: Date\n }\n): Promise<PipelineRunRecord> {\n const { startedAt, ...queuedRun } = input\n await queueTestPipelineRun(storage, { ...queuedRun, queuedAt: startedAt })\n return storage.pipelineRuns!.start({\n id: input.id,\n projectId: input.projectId,\n startedAt,\n })\n}\n",
|
|
27
27
|
"import { describe, expect, test } from \"bun:test\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { ProjectionMaterializationIdentity } from \"../materialization/model\"\nimport type { ExecutionStorage } from \"../storage/executions\"\nimport type {\n ProjectionRunClaim,\n ProjectionRunFailureCode,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n} from \"../storage/projection-runs\"\n\nexport interface ProjectionRunStorageContractContext<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n readonly projectionRuns: TStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface ProjectionRunStorageContractSuiteOptions<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n /** Factory that returns one isolated execution + projection-run store for each test. */\n readonly createStorage: () =>\n | ProjectionRunStorageContractContext<TStorage>\n | Promise<ProjectionRunStorageContractContext<TStorage>>\n readonly setup?: (context: ProjectionRunStorageContractContext<TStorage>) => void | Promise<void>\n readonly cleanup?: (\n context: ProjectionRunStorageContractContext<TStorage>\n ) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst objectTarget = { objectTypeId: \"Device\" } as const\n\nconst failure = {\n code: \"internal.unexpected\",\n message: \"Projection failed\",\n retryable: false,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: \"contract.devices\", runId: \"failed-run\" },\n} as const satisfies SixbFailure<ProjectionRunFailureCode>\n\nconst replacementIdentity = {\n projectionId: \"contract.devices\",\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-1\",\n ownershipHash: \"ownership-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\nconst telemetryIdentity = {\n projectionId: \"contract.temperatures\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-telemetry-1\",\n ownershipHash: \"ownership-telemetry-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\n/** Runs the single durable, fenced projection-run lifecycle against a provider. */\nexport function runProjectionRunStorageContractSuite<TStorage extends ProjectionRunStorage>(\n label: string,\n options: ProjectionRunStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: ProjectionRunStorageContractContext<TStorage>) => Promise<void>\n ): Promise<void> => {\n const context = await options.createStorage()\n try {\n await options.setup?.(context)\n await body(context)\n } finally {\n await options.cleanup?.(context)\n }\n }\n\n describe(label, () => {\n test(\"admits a queued run only after its durable execution exists\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"queued-run\")\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: \"missing-execution\",\n })\n ).rejects.toThrow()\n\n const wrongSourceExecutionId = \"execution:wrong-source\"\n await context.executions.create({\n id: wrongSourceExecutionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: { type: \"event\", eventId: \"wrong-source\" },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: wrongSourceExecutionId,\n })\n ).rejects.toThrow(\"does not authorize Projection run\")\n\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.getById({ projectId: input.projectId, id: input.id })\n ).resolves.toMatchObject({\n id: input.id,\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"requeues the same admission after an enqueue failure\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"enqueue-retry-run\")\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.failEnqueue({\n id: input.id,\n projectId: input.projectId,\n error: {\n code: \"queue.enqueue_failed\",\n message: \"queue unavailable\",\n retryable: true,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: input.identity.projectionId, runId: input.id },\n },\n })\n ).resolves.toMatchObject({\n status: \"failed\",\n error: { code: \"queue.enqueue_failed\", message: \"queue unavailable\" },\n })\n\n await expect(context.projectionRuns.queue(admission)).resolves.toMatchObject({\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"keeps one run while reclaim rotates its execution\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"replacement-run\")\n await admitProjectionRun(context, input)\n const first = await storage.startOrReclaim(input)\n const second = await storage.startOrReclaim(input)\n\n expect(first.run).toMatchObject({ id: input.id, attempt: 1, status: \"running\" })\n expect(second.run).toMatchObject({ id: input.id, attempt: 2, status: \"running\" })\n expect(second.execution.executionToken).not.toBe(first.execution.executionToken)\n expect(second.run).not.toHaveProperty(\"executionToken\")\n expect(await storage.getById({ projectId, id: input.id })).toMatchObject({\n identity: replacementIdentity,\n target: objectTarget,\n progress: { sourceRowsRead: 0, sourceRowsSkipped: 0 },\n })\n })\n })\n\n test(\"fences every stale lock, progress, and terminal write\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"fenced-run\")\n await admitProjectionRun(context, input)\n const stale = await storage.startOrReclaim(input)\n const current = await storage.startOrReclaim(input)\n\n await expect(storage.lockForMaterialization(executionInput(stale))).rejects.toThrow(\n \"execution token is stale\"\n )\n await expect(\n storage.update({\n ...executionInput(stale),\n progress: { sourceRowsRead: 1 },\n })\n ).rejects.toThrow(\"execution token is stale\")\n await expect(\n storage.finish({\n ...executionInput(stale),\n protocol: \"replacement\",\n status: \"cancelled\",\n })\n ).rejects.toThrow(\"execution token is stale\")\n\n await expect(\n storage.update({\n ...executionInput(current),\n progress: { sourceRowsRead: 3 },\n })\n ).resolves.toMatchObject({ progress: { sourceRowsRead: 3 } })\n })\n })\n\n test(\"rejects immutable identity and target drift\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"identity-run\")\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const changedIdentity = { ...replacementIdentity, ownershipHash: \"different-ownership\" }\n\n await expect(\n storage.startOrReclaim({ ...input, identity: changedIdentity })\n ).rejects.toThrow(\"identity does not match\")\n await expect(\n storage.startOrReclaim({ ...input, target: { objectTypeId: \"OtherDevice\" } })\n ).rejects.toThrow(\"target object types do not match\")\n await expect(\n storage.lockForMaterialization({\n ...executionInput(claim),\n identity: changedIdentity,\n })\n ).rejects.toThrow(\"identity does not match\")\n })\n })\n\n test(\"keeps physical progress monotone and internally consistent\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"progress-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"progress-run\"))\n const execution = executionInput(claim)\n await expect(\n storage.update({\n ...execution,\n progress: { sourceRowsRead: 1, sourceRowsSkipped: 2 },\n })\n ).rejects.toThrow(\"sourceRowsSkipped must not exceed sourceRowsRead\")\n await storage.update({\n ...execution,\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 1 },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 4 } })\n ).rejects.toThrow(\"must not decrease\")\n })\n })\n\n test(\"rejects immutable dataset-version metadata reuse\", async () => {\n await withStorage(async (context) => {\n await admitProjectionRun(context, replacementInput(\"dataset-metadata-first\"))\n await expect(\n admitProjectionRun(context, {\n ...replacementInput(\"dataset-metadata-conflict\"),\n identity: {\n ...replacementIdentity,\n datasetVersion: {\n ...replacementIdentity.datasetVersion,\n createdAt: \"2026-01-02T00:00:00.000Z\",\n },\n },\n })\n ).rejects.toThrow(\"immutable dataset version id with different metadata\")\n })\n })\n\n test(\"advances telemetry in contiguous fixed physical batches\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 3,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n expect(claim.run).toMatchObject({\n telemetryCheckpoint: {\n fixedBatchSize: 3,\n nextBatchOrdinal: 0,\n nextRowOffset: 0,\n inputExhausted: false,\n },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 1 } })\n ).rejects.toThrow(\"can only advance with its checkpoint\")\n\n await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 3,\n batchRowsSkipped: 1,\n inputExhausted: false,\n })\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 2,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n ).rejects.toThrow(\"expected batch ordinal 1\")\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: false,\n })\n ).rejects.toThrow(\"partial non-final batch\")\n\n const exhausted = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 2,\n batchRowsSkipped: 1,\n inputExhausted: true,\n })\n expect(exhausted).toMatchObject({\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 2 },\n telemetryCheckpoint: { nextBatchOrdinal: 2, nextRowOffset: 5, inputExhausted: true },\n })\n })\n })\n\n test(\"keeps a missing target until the batch it blocks commits\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-missing-target-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 2,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n const firstSeenAt = new Date(\"2026-06-01T12:00:00.000Z\")\n const missingTarget = {\n objectTypeId: \"Device\",\n objectId: \"missing-device\",\n batchOrdinal: 0,\n firstSeenAt,\n }\n\n const waiting = await storage.recordMissingTarget({ ...execution, missingTarget })\n expect(waiting.missingTarget).toEqual(missingTarget)\n expect(\n (await storage.getById({ projectId, id: \"telemetry-missing-target-run\" }))?.missingTarget\n ).toEqual(missingTarget)\n\n // A wait anchored to a batch the run has already passed would outlive the progress that\n // resolved it, so it is refused rather than stored.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, batchOrdinal: 1 },\n })\n ).rejects.toThrow(\"cannot wait on batch 1\")\n\n // A run can only wait on the object type it writes: nothing else can appear in its\n // telemetry. Refused here so an adapter never has to rely on its own CHECK for it.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, objectTypeId: \"Building\" },\n })\n ).rejects.toThrow(\"cannot wait on 'Building'\")\n\n // The whole wait or none of it. A half-written one reads as waiting since the epoch, or\n // waiting for nothing, and both decide a run's fate.\n for (const partial of [\n { objectId: \"\" },\n { objectTypeId: \"\" },\n { firstSeenAt: new Date(Number.NaN) },\n ]) {\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, ...partial },\n })\n ).rejects.toThrow()\n }\n\n // The write is last-wins; keeping the original start is the worker's rule, which only\n // records when the object or the batch changes. An adapter that merged instead would\n // make that rule unenforceable.\n const rerecorded = await storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, firstSeenAt: new Date(\"2026-06-01T12:01:00.000Z\") },\n })\n expect(rerecorded.missingTarget?.firstSeenAt).toEqual(new Date(\"2026-06-01T12:01:00.000Z\"))\n\n const advanced = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n expect(advanced.missingTarget).toBeUndefined()\n })\n })\n\n test(\"requires and records explicit telemetry EOF with terminal success\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"empty-telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 10,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n\n await expect(\n storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n } as Parameters<ProjectionRunStorage[\"finish\"]>[0])\n ).rejects.toThrow(\"cannot succeed before input exhaustion\")\n await expect(storage.getById({ projectId, id: claim.run.id })).resolves.toMatchObject({\n status: \"running\",\n telemetryCheckpoint: { inputExhausted: false },\n })\n\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n inputExhausted: true,\n })\n expect(finished).toMatchObject({\n status: \"succeeded\",\n progress: { sourceRowsRead: 0 },\n telemetryCheckpoint: { inputExhausted: true },\n })\n await expect(storage.lockForMaterialization(executionInput(claim))).rejects.toThrow(\n \"already terminal\"\n )\n })\n })\n\n test(\"validates, detaches, and persists scoped failures\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"failed-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"failed-run\"))\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"replacement\",\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n\n expect(finished).toMatchObject({\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n expect(finished.error).not.toBe(failure)\n await expect(storage.getById({ projectId, id: \"failed-run\" })).resolves.toMatchObject({\n error: failure,\n })\n\n await admitProjectionRun(context, replacementInput(\"invalid-failure-run\"))\n const invalid = await storage.startOrReclaim(replacementInput(\"invalid-failure-run\"))\n await expect(\n storage.finish({\n ...executionInput(invalid),\n protocol: \"replacement\",\n status: \"failed\",\n error: { ...failure, code: \"dataset.not_found\" } as never,\n })\n ).rejects.toThrow(\"code is not allowed by this failure contract\")\n })\n })\n\n test(\"keeps equal run ids isolated by project\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const projectA = { ...replacementInput(\"shared-id\"), projectId: \"project-a\" } as const\n const projectB = { ...replacementInput(\"shared-id\"), projectId: \"project-b\" } as const\n await admitProjectionRun(context, projectA)\n await admitProjectionRun(context, projectB)\n await storage.startOrReclaim(projectA)\n await storage.startOrReclaim(projectB)\n\n expect(await storage.getById({ projectId: \"project-a\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-b\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-c\", id: \"shared-id\" })).toBeNull()\n })\n })\n })\n}\n\nasync function admitProjectionRun<TStorage extends ProjectionRunStorage>(\n context: ProjectionRunStorageContractContext<TStorage>,\n input: StartOrReclaimProjectionRunInput\n): Promise<QueueProjectionRunInput> {\n const executionId = `execution:${input.projectId}:${input.id}`\n await context.executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: {\n type: \"datasetVersion\",\n datasetId: input.identity.datasetVersion.datasetId,\n versionId: input.identity.datasetVersion.versionId,\n },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n const admission = {\n ...input,\n executionId,\n queuedAt: new Date(\"2026-01-01T00:00:01.000Z\"),\n } satisfies QueueProjectionRunInput\n await context.projectionRuns.queue(admission)\n return admission\n}\n\nfunction replacementInput(id: string) {\n return { id, projectId, identity: replacementIdentity, target: objectTarget } as const\n}\n\nfunction executionInput(claim: ProjectionRunClaim) {\n return {\n id: claim.run.id,\n projectId: claim.run.projectId,\n identity: claim.run.identity,\n executionToken: claim.execution.executionToken,\n }\n}\n",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"import { describe, expect, test } from \"bun:test\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { CreateExecutionInput, Storage } from \"../storage\"\nimport type { WebhookRunFailureCode } from \"../storage/webhook-runs\"\nimport { startTestWebhookRun } from \"./webhook-execution\"\n\nexport type WebhookRunStorageContractStorage = Storage & {\n readonly webhookRuns: NonNullable<Storage[\"webhookRuns\"]>\n}\n\nexport interface WebhookRunStorageContractSuiteOptions<\n TStorage extends WebhookRunStorageContractStorage = WebhookRunStorageContractStorage,\n> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"webhook-contract\"\nconst route = \"/api/webhooks/github/events\"\nconst bodySha256 = \"0\".repeat(64)\nconst finishedAt = new Date(\"2026-06-01T12:01:00.000Z\")\nconst retryableFailure = {\n code: \"webhook.delivery_failed\",\n message: \"Webhook delivery failed.\",\n retryable: true,\n at: finishedAt.toISOString(),\n details: { connectorId: \"github\", webhookId: \"events\", runId: \"delivery-retry\" },\n} as const satisfies SixbFailure<WebhookRunFailureCode>\nconst rejectedFailure = {\n code: \"webhook.delivery_rejected\",\n message: \"Webhook delivery was rejected.\",\n retryable: false,\n at: finishedAt.toISOString(),\n} as const satisfies SixbFailure<WebhookRunFailureCode>\n\n/** Runs the durable Webhook delivery contract against one complete storage provider. */\nexport function runWebhookRunStorageContractSuite<\n TStorage extends WebhookRunStorageContractStorage,\n>(label: string, options: WebhookRunStorageContractSuiteOptions<TStorage>): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"round-trips the immutable execution and delivery identity\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"delivery-1\", \"provider-1\"))\n expect(run).toMatchObject({\n id: \"delivery-1\",\n projectId,\n executionId: \"test_webhook_execution:delivery-1\",\n connectorId: \"github\",\n webhookId: \"events\",\n status: \"running\",\n route,\n requestBodyBytes: 12,\n requestBodySha256: bodySha256,\n idempotencyKey: \"provider-1\",\n })\n await expect(\n storage.webhookRuns.getByDelivery({\n projectId,\n connectorId: \"github\",\n webhookId: \"events\",\n idempotencyKey: \"provider-1\",\n })\n ).resolves.toEqual(run)\n })\n })\n\n test(\"rejects missing or mismatched execution authority\", async () => {\n await withStorage(async (storage) => {\n const missing = runInput(\"missing-execution\")\n await expect(\n storage.webhookRuns.start({ ...missing, executionId: \"missing\" })\n ).rejects.toMatchObject({ code: \"invalid_execution\" })\n\n await storage.executions.create(disabledRequestExecution(\"wrong-execution\"))\n await expect(\n storage.webhookRuns.start({ ...missing, executionId: \"wrong-execution\" })\n ).rejects.toMatchObject({ code: \"invalid_execution\" })\n })\n })\n\n test(\"enforces one run per provider delivery key\", async () => {\n await withStorage(async (storage) => {\n await startTestWebhookRun(storage, runInput(\"delivery-first\", \"provider-shared\"))\n await expect(\n startTestWebhookRun(storage, runInput(\"delivery-second\", \"provider-shared\"))\n ).rejects.toMatchObject({ code: \"duplicate_run\" })\n })\n })\n\n test(\"restarts only retryable failures without changing execution identity\", async () => {\n await withStorage(async (storage) => {\n const started = await startTestWebhookRun(\n storage,\n runInput(\"delivery-retry\", \"provider-retry\")\n )\n await storage.webhookRuns.finish({\n projectId,\n id: started.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 503,\n error: retryableFailure,\n })\n const restarted = await storage.webhookRuns.restart({ projectId, id: started.id })\n expect(restarted).toMatchObject({\n id: started.id,\n executionId: started.executionId,\n status: \"running\",\n })\n expect(restarted.finishedAt).toBeUndefined()\n expect(restarted.responseStatus).toBeUndefined()\n expect(restarted.error).toBeUndefined()\n\n await storage.webhookRuns.finish({\n projectId,\n id: started.id,\n status: \"succeeded\",\n responseStatus: 202,\n })\n await expect(\n storage.webhookRuns.restart({ projectId, id: started.id })\n ).rejects.toMatchObject({ code: \"invalid_transition\" })\n })\n })\n\n test(\"does not reopen a terminal client rejection\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"delivery-rejected\"))\n await storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 422,\n error: rejectedFailure,\n })\n await expect(storage.webhookRuns.restart({ projectId, id: run.id })).rejects.toMatchObject({\n code: \"invalid_transition\",\n })\n })\n })\n\n test(\"persists a validated, detached failure through get and list\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"failed-run\", \"failed-key\"))\n const failedRunFailure = {\n ...retryableFailure,\n details: { ...retryableFailure.details, runId: run.id },\n }\n const mutableFailure = {\n code: \"webhook.delivery_failed\" as const,\n message: String(failedRunFailure.message),\n retryable: true as const,\n at: failedRunFailure.at,\n details: {\n connectorId: String(failedRunFailure.details.connectorId),\n webhookId: String(failedRunFailure.details.webhookId),\n runId: String(failedRunFailure.details.runId),\n },\n }\n const finished = await storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 503,\n error: mutableFailure,\n })\n\n mutableFailure.details.runId = \"mutated-after-write\"\n expect(finished.error).toEqual(failedRunFailure)\n await expect(storage.webhookRuns.getById({ projectId, id: run.id })).resolves.toMatchObject(\n {\n error: failedRunFailure,\n }\n )\n await expect(\n storage.webhookRuns.list({\n projectId,\n statuses: [\"failed\"],\n idempotencyKey: \"failed-key\",\n })\n ).resolves.toMatchObject({ runs: [{ id: run.id, error: failedRunFailure }], total: 1 })\n })\n })\n\n test(\"rejects failures outside the Webhook run contract without finishing\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"invalid-failure\"))\n await expect(\n storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n error: { ...retryableFailure, code: \"runtime.cancelled\" } as never,\n })\n ).rejects.toThrow(\"code is not allowed by this failure contract\")\n const unchanged = await storage.webhookRuns.getById({ projectId, id: run.id })\n expect(unchanged?.status).toBe(\"running\")\n expect(unchanged?.error).toBeUndefined()\n })\n })\n })\n}\n\nfunction runInput(id: string, idempotencyKey?: string) {\n return {\n id,\n projectId,\n connectorId: \"github\",\n webhookId: \"events\",\n method: \"POST\",\n route,\n requestBodyBytes: 12,\n requestBodySha256: bodySha256,\n ...(idempotencyKey === undefined ? {} : { idempotencyKey }),\n startedAt: new Date(\"2026-06-01T12:00:00.000Z\"),\n }\n}\n\nfunction disabledRequestExecution(id: string): CreateExecutionInput {\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId: id },\n source: { type: \"http\", requestId: id },\n correlationId: `correlation:${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n",
|
|
33
33
|
"import type { AuthorizablePrincipal, TrustedPrimitiveRef } from \"../execution\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution chain required by a workflow-run storage fixture. */\nexport async function createTestWorkflowExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly workflowId: string\n readonly runId: string\n readonly executionId?: string\n readonly requestedBy?: AuthorizablePrincipal\n }\n): Promise<string> {\n const parentExecutionId = `test_request_execution:${input.runId}`\n const executionId = input.executionId ?? `test_workflow_execution:${input.runId}`\n const primitive: TrustedPrimitiveRef = {\n kind: \"workflow\",\n id: input.workflowId,\n runId: input.runId,\n }\n\n await executions.create({\n id: parentExecutionId,\n projectId: input.projectId,\n executor: { type: \"request\", requestId: `test_request:${input.runId}` },\n source: { type: \"http\", requestId: `test_request:${input.runId}` },\n ...(input.requestedBy === undefined ? {} : { requestedBy: structuredClone(input.requestedBy) }),\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef:\n input.requestedBy === undefined\n ? { type: \"disabled\" }\n : { type: \"principal\", principal: structuredClone(input.requestedBy) },\n })\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"execution\", executionId: parentExecutionId },\n ...(input.requestedBy === undefined ? {} : { requestedBy: structuredClone(input.requestedBy) }),\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n\n return executionId\n}\n\n/** Create a root workflow execution as produced by an automatic trigger. */\nexport async function createTestAutomaticWorkflowExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly workflowId: string\n readonly runId: string\n readonly executionId?: string\n readonly source?: { readonly type: \"schedule\" | \"event\"; readonly eventId: string }\n readonly correlationId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_workflow_execution:${input.runId}`\n const primitive: TrustedPrimitiveRef = {\n kind: \"workflow\",\n id: input.workflowId,\n runId: input.runId,\n }\n\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: input.source ?? { type: \"event\", eventId: `test_event:${input.runId}` },\n correlationId: input.correlationId ?? `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n\n return executionId\n}\n"
|
|
34
34
|
],
|
|
35
|
-
"mappings": "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",
|
|
36
|
-
"debugId": "
|
|
35
|
+
"mappings": "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",
|
|
36
|
+
"debugId": "18CDE018B0AEEC3264756E2164756E21",
|
|
37
37
|
"names": []
|
|
38
38
|
}
|