@earendil-works/pi-durable 0.87.1 → 0.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -4
- package/dist/documents.d.ts +66 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +98 -0
- package/dist/documents.js.map +1 -0
- package/dist/entries.d.ts +13 -0
- package/dist/entries.d.ts.map +1 -0
- package/dist/entries.js +18 -0
- package/dist/entries.js.map +1 -0
- package/dist/env/index.d.ts +131 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +45 -0
- package/dist/env/index.js.map +1 -0
- package/dist/env/node.d.ts +45 -0
- package/dist/env/node.d.ts.map +1 -0
- package/dist/env/node.js +908 -0
- package/dist/env/node.js.map +1 -0
- package/dist/env/utils/adaptive-publisher.d.ts +24 -0
- package/dist/env/utils/adaptive-publisher.d.ts.map +1 -0
- package/dist/env/utils/adaptive-publisher.js +79 -0
- package/dist/env/utils/adaptive-publisher.js.map +1 -0
- package/dist/env/utils/output-capture.d.ts +31 -0
- package/dist/env/utils/output-capture.d.ts.map +1 -0
- package/dist/env/utils/output-capture.js +238 -0
- package/dist/env/utils/output-capture.js.map +1 -0
- package/dist/env/utils/truncate.d.ts +71 -0
- package/dist/env/utils/truncate.d.ts.map +1 -0
- package/dist/env/utils/truncate.js +294 -0
- package/dist/env/utils/truncate.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +24 -0
- package/dist/errors.js.map +1 -0
- package/dist/harness/config.d.ts +20 -0
- package/dist/harness/config.d.ts.map +1 -0
- package/dist/harness/config.js +18 -0
- package/dist/harness/config.js.map +1 -0
- package/dist/harness/context.d.ts +27 -0
- package/dist/harness/context.d.ts.map +1 -0
- package/dist/harness/context.js +109 -0
- package/dist/harness/context.js.map +1 -0
- package/dist/harness/generation.d.ts +36 -0
- package/dist/harness/generation.d.ts.map +1 -0
- package/dist/harness/generation.js +266 -0
- package/dist/harness/generation.js.map +1 -0
- package/dist/harness/harness.d.ts +10 -0
- package/dist/harness/harness.d.ts.map +1 -0
- package/dist/harness/harness.js +266 -0
- package/dist/harness/harness.js.map +1 -0
- package/dist/harness/live.d.ts +40 -0
- package/dist/harness/live.d.ts.map +1 -0
- package/dist/harness/live.js +41 -0
- package/dist/harness/live.js.map +1 -0
- package/dist/harness/prompt.d.ts +24 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +88 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/registry.d.ts +7 -0
- package/dist/harness/registry.d.ts.map +1 -0
- package/dist/harness/registry.js +309 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/harness/scheduler.d.ts +63 -0
- package/dist/harness/scheduler.d.ts.map +1 -0
- package/dist/harness/scheduler.js +605 -0
- package/dist/harness/scheduler.js.map +1 -0
- package/dist/harness/submissions.d.ts +24 -0
- package/dist/harness/submissions.d.ts.map +1 -0
- package/dist/harness/submissions.js +133 -0
- package/dist/harness/submissions.js.map +1 -0
- package/dist/harness/types.d.ts +358 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +2 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/harness/util.d.ts +14 -0
- package/dist/harness/util.d.ts.map +1 -0
- package/dist/harness/util.js +55 -0
- package/dist/harness/util.js.map +1 -0
- package/dist/ids.d.ts +6 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +9 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/session/forks.d.ts +10 -0
- package/dist/session/forks.d.ts.map +1 -0
- package/dist/session/forks.js +42 -0
- package/dist/session/forks.js.map +1 -0
- package/dist/session/observation.d.ts +28 -0
- package/dist/session/observation.d.ts.map +1 -0
- package/dist/session/observation.js +280 -0
- package/dist/session/observation.js.map +1 -0
- package/dist/session/session.d.ts +59 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +380 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/transaction.d.ts +105 -0
- package/dist/session/transaction.d.ts.map +1 -0
- package/dist/session/transaction.js +718 -0
- package/dist/session/transaction.js.map +1 -0
- package/dist/storage/jsonl/index.d.ts +2 -0
- package/dist/storage/jsonl/index.d.ts.map +1 -0
- package/dist/storage/jsonl/index.js +2 -0
- package/dist/storage/jsonl/index.js.map +1 -0
- package/dist/storage/jsonl/node.d.ts +6 -0
- package/dist/storage/jsonl/node.d.ts.map +1 -0
- package/dist/storage/jsonl/node.js +8 -0
- package/dist/storage/jsonl/node.js.map +1 -0
- package/dist/storage/jsonl/storage.d.ts +115 -0
- package/dist/storage/jsonl/storage.d.ts.map +1 -0
- package/dist/storage/jsonl/storage.js +681 -0
- package/dist/storage/jsonl/storage.js.map +1 -0
- package/dist/storage/memory.d.ts +31 -14
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +208 -61
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/sqlite/database.d.ts +5 -1
- package/dist/storage/sqlite/database.d.ts.map +1 -1
- package/dist/storage/sqlite/database.js.map +1 -1
- package/dist/storage/sqlite/index.d.ts.map +1 -1
- package/dist/storage/sqlite/migrations.d.ts +1 -1
- package/dist/storage/sqlite/migrations.d.ts.map +1 -1
- package/dist/storage/sqlite/migrations.js +8 -1
- package/dist/storage/sqlite/migrations.js.map +1 -1
- package/dist/storage/sqlite/node.d.ts.map +1 -1
- package/dist/storage/sqlite/node.js +2 -2
- package/dist/storage/sqlite/node.js.map +1 -1
- package/dist/storage/sqlite/storage.d.ts +20 -14
- package/dist/storage/sqlite/storage.d.ts.map +1 -1
- package/dist/storage/sqlite/storage.js +159 -55
- package/dist/storage/sqlite/storage.js.map +1 -1
- package/dist/tasks.d.ts +6 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +5 -0
- package/dist/tasks.js.map +1 -0
- package/dist/testing/assertions.d.ts +5 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +25 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/runner.d.ts +10 -0
- package/dist/testing/runner.d.ts.map +1 -0
- package/dist/testing/runner.js +14 -0
- package/dist/testing/runner.js.map +1 -0
- package/dist/testing/storage-benchmark.d.ts +41 -0
- package/dist/testing/storage-benchmark.d.ts.map +1 -0
- package/dist/testing/storage-benchmark.js +351 -0
- package/dist/testing/storage-benchmark.js.map +1 -0
- package/dist/testing/storage-conformance.d.ts +4 -0
- package/dist/testing/storage-conformance.d.ts.map +1 -0
- package/dist/testing/storage-conformance.js +1122 -0
- package/dist/testing/storage-conformance.js.map +1 -0
- package/dist/testing/types.d.ts +19 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +2 -0
- package/dist/testing/types.js.map +1 -0
- package/dist/types.d.ts +422 -54
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/chord-delta-findings.md +1 -1
- package/docs/pico-v5-chord-usage.md +47 -60
- package/docs/pico-v5-handoff.md +469 -264
- package/docs/pico-v5.md +1523 -639
- package/package.json +30 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-conformance.js","sourceRoot":"","sources":["../../src/testing/storage-conformance.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type { Op } from \"@earendil-works/chord/delta\";\nimport { idFromNumber } from \"../ids.ts\";\nimport {\n\ttype ConversationId,\n\ttype Cursor,\n\ttype DocumentCreate,\n\ttype DocumentId,\n\ttype EntryId,\n\ttype EntryRecord,\n\ttype JsonObject,\n\tROOT_CONVERSATION_ID,\n\ttype Storage,\n\ttype StorageWrite,\n\ttype SubmissionId,\n\ttype SubmissionQuery,\n\ttype SubmissionRecord,\n\ttype TaskId,\n\ttype TaskRecord,\n} from \"../types.ts\";\nimport type { StorageConformanceAssertions, StorageConformanceCase, StorageConformanceOptions } from \"./types.ts\";\n\nconst context = BACKGROUND_CONTEXT;\ntype StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;\n\nasync function createRoot(storage: Storage): Promise<ConversationId> {\n\tawait storage.commit([{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], context);\n\treturn ROOT_CONVERSATION_ID;\n}\n\nfunction pendingTask(id: TaskId<JsonValue>, conversationId: ConversationId, phase = \"ready\") {\n\treturn {\n\t\tid,\n\t\tconversationId,\n\t\tkind: \"test.task\",\n\t\tversion: 1,\n\t\tinput: { value: id },\n\t\tstate: { status: \"pending\", checkpoint: { phase } },\n\t\tafter: [],\n\t\tbackground: false,\n\t\tabortRequested: false,\n\t} satisfies StoredTask;\n}\n\nfunction entry(\n\tid: EntryId,\n\tconversationId: ConversationId,\n\tkind = \"message\",\n\textra: Partial<EntryRecord> = {},\n): EntryRecord {\n\treturn { id, conversationId, kind, ...extra };\n}\n\ntype ConformanceTest = (storage: Storage) => Promise<void>;\n\ntype AssertionResult = {\n\ttoBe(expected: unknown): void;\n\ttoBeDefined(): void;\n\ttoBeGreaterThan(expected: number): void;\n\ttoBeUndefined(): void;\n\ttoEqual(expected: unknown): void;\n\ttoHaveLength(expected: number): void;\n\ttoMatchObject(expected: unknown): void;\n\treadonly rejects: { toThrow(messageIncludes: string): Promise<void> };\n\treadonly resolves: { toBe(expected: unknown): Promise<void> };\n};\n\nfunction assertionFacade(assertions: StorageConformanceAssertions) {\n\treturn (actual: unknown): AssertionResult => ({\n\t\ttoBe: (expected) => assertions.strictEqual(actual, expected),\n\t\ttoBeDefined: () => assertions.ok(actual !== undefined, \"Expected value to be defined\"),\n\t\ttoBeGreaterThan: (expected) => assertions.greaterThan(actual as number, expected),\n\t\ttoBeUndefined: () => assertions.strictEqual(actual, undefined),\n\t\ttoEqual: (expected) => assertions.deepEqual(actual, expected),\n\t\ttoHaveLength: (expected) => assertions.strictEqual((actual as { readonly length: unknown }).length, expected),\n\t\ttoMatchObject: (expected) => assertions.partialDeepEqual(actual, expected),\n\t\trejects: {\n\t\t\ttoThrow: (messageIncludes) => assertions.rejects(Promise.resolve(actual), messageIncludes),\n\t\t},\n\t\tresolves: {\n\t\t\ttoBe: async (expected) => assertions.strictEqual(await Promise.resolve(actual), expected),\n\t\t},\n\t});\n}\n\nfunction createCase(options: StorageConformanceOptions, name: string, test: ConformanceTest): StorageConformanceCase {\n\treturn { name, run: () => options.withStorage(test) };\n}\n\n/** Creates runner-independent cases. `withStorage` must call and await its callback exactly once per case. */\nexport function createStorageConformance(options: StorageConformanceOptions): readonly StorageConformanceCase[] {\n\tconst expect = assertionFacade(options.assertions);\n\treturn [\n\t\tcreateCase(options, \"reserves ID 1 for the immutable root conversation\", async (storage) => {\n\t\t\texpect(await storage.mintId<ConversationId>()).toBe(2);\n\t\t\tawait expect(createRoot(storage)).resolves.toBe(ROOT_CONVERSATION_ID);\n\t\t\texpect(await storage.conversation(ROOT_CONVERSATION_ID, context)).toEqual({ id: ROOT_CONVERSATION_ID });\n\t\t\tawait expect(\n\t\t\t\tstorage.commit([{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], context),\n\t\t\t).rejects.toThrow(`ID ${ROOT_CONVERSATION_ID} already belongs to conversation`);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"commits mixed table writes atomically and rolls all of them back on failure\",\n\t\t\tasync (storage) => {\n\t\t\t\tconst rootId = await createRoot(storage);\n\t\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\t\tconst submissionId = await storage.mintId<SubmissionId>();\n\t\t\t\tconst task = pendingTask(taskId, rootId);\n\t\t\t\tconst input: SubmissionRecord = {\n\t\t\t\t\tid: submissionId,\n\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\trequestId: \"request-1\",\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tstatus: \"placed\",\n\t\t\t\t\tentry: entryId,\n\t\t\t\t};\n\t\t\t\tconst initialSeq = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ type: \"entry\", value: entry(entryId, rootId, \"user\", { data: { text: \"hello\" } }) },\n\t\t\t\t\t\t{ type: \"task\", value: task },\n\t\t\t\t\t\t{ type: \"submission\", value: input },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\n\t\t\t\texpect(await storage.entry(entryId, context)).toEqual({\n\t\t\t\t\tentry: entry(entryId, rootId, \"user\", { data: { text: \"hello\" } }),\n\t\t\t\t\tcommitSeq: initialSeq,\n\t\t\t\t});\n\t\t\t\texpect(await storage.task(taskId, context)).toEqual(task);\n\t\t\t\texpect(await storage.submission(submissionId, context)).toEqual(input);\n\n\t\t\t\tconst transientEntryId = await storage.mintId<EntryId>();\n\t\t\t\tconst runningTask: StoredTask = {\n\t\t\t\t\t...task,\n\t\t\t\t\tstate: { status: \"running\", checkpoint: { phase: \"effect\" } },\n\t\t\t\t};\n\t\t\t\tconst doneInput: SubmissionRecord = { ...input, status: \"done\", answer: transientEntryId };\n\t\t\t\tawait expect(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{ type: \"task\", value: runningTask },\n\t\t\t\t\t\t\t{ type: \"submission\", value: doneInput },\n\t\t\t\t\t\t\t{ type: \"entry\", value: entry(transientEntryId, rootId, \"assistant\") },\n\t\t\t\t\t\t\t{ type: \"conversation\", value: { id: rootId } },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t),\n\t\t\t\t).rejects.toThrow(`ID ${rootId} already belongs to conversation`);\n\n\t\t\t\texpect(await storage.task(taskId, context)).toEqual(task);\n\t\t\t\texpect(await storage.submission(submissionId, context)).toEqual(input);\n\t\t\t\texpect(await storage.entry(transientEntryId, context)).toBeUndefined();\n\t\t\t\tconst afterRollbackSeq = await storage.commit(\n\t\t\t\t\t[{ type: \"entry\", value: entry(await storage.mintId<EntryId>(), rootId, \"after-rollback\") }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(afterRollbackSeq).toBeGreaterThan(initialSeq);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(options, \"detaches retained writes and every returned record\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst submissionId = await storage.mintId<SubmissionId>();\n\t\t\tconst entryData = { nested: [1, 2] };\n\t\t\tconst checkpoint = { phase: \"ready\", nested: { count: 1 } };\n\t\t\tconst detail = { codes: [\"initial\"] };\n\t\t\tconst storedEntry = entry(entryId, rootId, \"note\", { data: entryData });\n\t\t\tconst storedTask: StoredTask = {\n\t\t\t\t...pendingTask(taskId, rootId),\n\t\t\t\tstate: { status: \"pending\", checkpoint },\n\t\t\t};\n\t\t\tconst storedInput: SubmissionRecord = {\n\t\t\t\tid: submissionId,\n\t\t\t\tconversationId: rootId,\n\t\t\t\ttype: \"input\",\n\t\t\t\tstatus: \"unanswered\",\n\t\t\t\treason: \"failed\",\n\t\t\t\tdetail,\n\t\t\t};\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"entry\", value: storedEntry },\n\t\t\t\t\t{ type: \"task\", value: storedTask },\n\t\t\t\t\t{ type: \"submission\", value: storedInput },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tentryData.nested.push(3);\n\t\t\tcheckpoint.nested.count = 2;\n\t\t\tdetail.codes.push(\"mutated\");\n\t\t\texpect((await storage.entry(entryId, context))?.entry.data).toEqual({ nested: [1, 2] });\n\t\t\texpect((await storage.task(taskId, context))?.state).toEqual({\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tcheckpoint: { phase: \"ready\", nested: { count: 1 } },\n\t\t\t});\n\t\t\texpect((await storage.submission(submissionId, context))?.detail).toEqual({ codes: [\"initial\"] });\n\n\t\t\tconst readEntry = (await storage.entry(entryId, context))!.entry;\n\t\t\t(readEntry.data as { nested: number[] }).nested.push(9);\n\t\t\tconst readTask = (await storage.task(taskId, context))!;\n\t\t\tif (readTask.state.status !== \"terminal\") {\n\t\t\t\t(readTask.state.checkpoint as { phase: string; nested: { count: number } }).nested.count = 9;\n\t\t\t}\n\t\t\tconst readInput = (await storage.submission(submissionId, context))!;\n\t\t\t(readInput.detail as { codes: string[] }).codes.push(\"read mutation\");\n\n\t\t\texpect((await storage.entry(entryId, context))?.entry.data).toEqual({ nested: [1, 2] });\n\t\t\texpect((await storage.task(taskId, context))?.state).toEqual({\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tcheckpoint: { phase: \"ready\", nested: { count: 1 } },\n\t\t\t});\n\t\t\texpect((await storage.submission(submissionId, context))?.detail).toEqual({ codes: [\"initial\"] });\n\t\t}),\n\n\t\tcreateCase(options, \"detaches prototype-like JSON keys without changing object prototypes\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\tconst data = JSON.parse(\n\t\t\t\t'{\"__proto__\":{\"polluted\":false},\"constructor\":{\"label\":\"stored\"},\"toString\":\"value\"}',\n\t\t\t) as Record<string, JsonValue>;\n\t\t\tawait storage.commit([{ type: \"entry\", value: entry(entryId, rootId, \"note\", { data }) }], context);\n\n\t\t\t(Reflect.get(data, \"__proto__\") as Record<string, JsonValue>).polluted = true;\n\t\t\t(Reflect.get(data, \"constructor\") as Record<string, JsonValue>).label = \"mutated\";\n\t\t\tconst firstRead = (await storage.entry(entryId, context))!.entry.data as Record<string, JsonValue>;\n\t\t\texpect(Object.getPrototypeOf(firstRead)).toBe(Object.prototype);\n\t\t\texpect(Object.hasOwn(firstRead, \"__proto__\")).toBe(true);\n\t\t\texpect(Reflect.get(firstRead, \"__proto__\")).toEqual({ polluted: false });\n\t\t\texpect(Reflect.get(firstRead, \"constructor\")).toEqual({ label: \"stored\" });\n\t\t\texpect(Reflect.get(firstRead, \"toString\")).toBe(\"value\");\n\t\t\texpect(({} as { polluted?: boolean }).polluted).toBeUndefined();\n\n\t\t\t(Reflect.get(firstRead, \"__proto__\") as Record<string, JsonValue>).polluted = true;\n\t\t\tconst secondRead = (await storage.entry(entryId, context))!.entry.data as Record<string, JsonValue>;\n\t\t\texpect(Reflect.get(secondRead, \"__proto__\")).toEqual({ polluted: false });\n\t\t\texpect(Reflect.get(secondRead, \"constructor\")).toEqual({ label: \"stored\" });\n\t\t\texpect(Reflect.get(secondRead, \"toString\")).toBe(\"value\");\n\t\t}),\n\n\t\tcreateCase(options, \"indexes entries committed out of ID order\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"entry\", value: entry(idFromNumber<EntryId>(30), rootId) },\n\t\t\t\t\t{ type: \"entry\", value: entry(idFromNumber<EntryId>(10), rootId) },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: entry(idFromNumber<EntryId>(20), rootId, \"marker\", {\n\t\t\t\t\t\t\thead: idFromNumber<EntryId>(10),\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\texpect(\n\t\t\t\t(await storage.scanEntries({ conversationId: rootId }, 10, undefined, context)).items.map(({ id }) => id),\n\t\t\t).toEqual([30, 20, 10]);\n\t\t\texpect((await storage.findLatestHeadMarker(rootId, undefined, context))?.id).toBe(20);\n\t\t}),\n\n\t\tcreateCase(options, \"continues an entry cursor below its last item after a newer commit\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst oldestId = await storage.mintId<EntryId>();\n\t\t\tconst middleId = await storage.mintId<EntryId>();\n\t\t\tconst newestId = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"entry\", value: entry(oldestId, rootId) },\n\t\t\t\t\t{ type: \"entry\", value: entry(middleId, rootId) },\n\t\t\t\t\t{ type: \"entry\", value: entry(newestId, rootId) },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tconst first = await storage.scanEntries({ conversationId: rootId }, 2, undefined, context);\n\t\t\texpect(first.items.map(({ id }) => id)).toEqual([newestId, middleId]);\n\t\t\tconst appendedId = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit([{ type: \"entry\", value: entry(appendedId, rootId) }], context);\n\t\t\tconst second = await storage.scanEntries({ conversationId: rootId }, 2, first.next, context);\n\t\t\texpect(second.items.map(({ id }) => id)).toEqual([oldestId]);\n\t\t\texpect(second.next).toBeUndefined();\n\t\t}),\n\n\t\tcreateCase(options, \"paginates conversations by opaque cursor in ascending ID order\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst secondId = await storage.mintId<ConversationId>();\n\t\t\tconst thirdId = await storage.mintId<ConversationId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"conversation\", value: { id: thirdId } },\n\t\t\t\t\t{ type: \"conversation\", value: { id: secondId } },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tconst first = await storage.scanConversations({}, 2, undefined, context);\n\t\t\texpect(first.items.map(({ id }) => id)).toEqual([rootId, secondId]);\n\t\t\texpect(first.next).toBeDefined();\n\t\t\tconst roundTrippedCursor = JSON.parse(JSON.stringify(first.next)) as NonNullable<typeof first.next>;\n\t\t\tconst second = await storage.scanConversations({}, 2, roundTrippedCursor, context);\n\t\t\texpect(second.items.map(({ id }) => id)).toEqual([thirdId]);\n\t\t\texpect(second.next).toBeUndefined();\n\t\t}),\n\n\t\tcreateCase(options, \"filters and pages conversations by durable owner edges\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst otherOwnerId = await storage.mintId<ConversationId>();\n\t\t\tconst firstTaskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst secondTaskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst firstId = await storage.mintId<ConversationId>();\n\t\t\tconst secondId = await storage.mintId<ConversationId>();\n\t\t\tconst thirdId = await storage.mintId<ConversationId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"conversation\", value: { id: otherOwnerId } },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\t\tvalue: { id: firstId, owner: { conversationId: rootId, taskId: firstTaskId } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\t\tvalue: { id: secondId, owner: { conversationId: rootId, taskId: secondTaskId } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\t\tvalue: { id: thirdId, owner: { conversationId: otherOwnerId, taskId: firstTaskId } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tconst first = await storage.scanConversations({ ownerConversationId: rootId }, 1, undefined, context);\n\t\t\texpect(first.items.map(({ id }) => id)).toEqual([firstId]);\n\t\t\texpect(first.next).toBeDefined();\n\t\t\tconst second = await storage.scanConversations({ ownerConversationId: rootId }, 1, first.next, context);\n\t\t\texpect(second.items.map(({ id }) => id)).toEqual([secondId]);\n\t\t\texpect(second.next).toBeUndefined();\n\t\t\texpect(\n\t\t\t\t(await storage.scanConversations({ ownerTaskId: firstTaskId }, 10, undefined, context)).items.map(\n\t\t\t\t\t({ id }) => id,\n\t\t\t\t),\n\t\t\t).toEqual([firstId, thirdId]);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanConversations(\n\t\t\t\t\t\t{ ownerConversationId: rootId, ownerTaskId: firstTaskId },\n\t\t\t\t\t\t10,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([firstId]);\n\t\t}),\n\n\t\tcreateCase(options, \"scans deep fork history newest-first through every ancestor cap\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst rootFirst = await storage.mintId<EntryId>();\n\t\t\tconst rootForkPoint = await storage.mintId<EntryId>();\n\t\t\tconst rootExcludedSameCommit = await storage.mintId<EntryId>();\n\t\t\tconst rootEntriesSeq = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"entry\", value: entry(rootFirst, rootId) },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: entry(rootForkPoint, rootId, \"marker\", { head: rootFirst }),\n\t\t\t\t\t},\n\t\t\t\t\t{ type: \"entry\", value: entry(rootExcludedSameCommit, rootId) },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst childId = await storage.mintId<ConversationId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\t\tvalue: { id: childId, parent: { conversationId: rootId, at: rootForkPoint } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst childForkPoint = await storage.mintId<EntryId>();\n\t\t\tconst childExcluded = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"entry\", value: entry(childForkPoint, childId, \"note\") },\n\t\t\t\t\t{ type: \"entry\", value: entry(childExcluded, childId) },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst rootExcludedLater = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit([{ type: \"entry\", value: entry(rootExcludedLater, rootId) }], context);\n\t\t\tconst grandchildId = await storage.mintId<ConversationId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\t\tvalue: { id: grandchildId, parent: { conversationId: childId, at: childForkPoint } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst grandchildHead = await storage.mintId<EntryId>();\n\t\t\tconst grandchildTail = await storage.mintId<EntryId>();\n\t\t\tconst grandchildEntriesSeq = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: entry(grandchildHead, grandchildId, \"marker\", { head: grandchildHead }),\n\t\t\t\t\t},\n\t\t\t\t\t{ type: \"entry\", value: entry(grandchildTail, grandchildId) },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst childExcludedLater = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit([{ type: \"entry\", value: entry(childExcludedLater, childId) }], context);\n\n\t\t\tconst first = await storage.scanEntries({ conversationId: grandchildId }, 2, undefined, context);\n\t\t\texpect(first.items.map(({ id }) => id)).toEqual([grandchildTail, grandchildHead]);\n\t\t\tconst second = await storage.scanEntries({ conversationId: grandchildId }, 2, first.next, context);\n\t\t\texpect(second.items.map(({ id }) => id)).toEqual([childForkPoint, rootForkPoint]);\n\t\t\tconst third = await storage.scanEntries({ conversationId: grandchildId }, 2, second.next, context);\n\t\t\texpect(third.items.map(({ id }) => id)).toEqual([rootFirst]);\n\t\t\texpect(third.next).toBeUndefined();\n\n\t\t\tconst currentMarker = await storage.findLatestHeadMarker(grandchildId, undefined, context);\n\t\t\texpect(currentMarker?.id).toBe(grandchildHead);\n\t\t\texpect(currentMarker?.head).toBe(grandchildHead);\n\t\t\tconst historicalMarker = await storage.findLatestHeadMarker(grandchildId, childForkPoint, context);\n\t\t\texpect(historicalMarker?.id).toBe(rootForkPoint);\n\t\t\texpect(historicalMarker?.head).toBe(rootFirst);\n\t\t\texpect(await storage.findLatestHeadMarker(grandchildId, rootFirst, context)).toBeUndefined();\n\n\t\t\tconst activeFirst = await storage.scanEntries(\n\t\t\t\t{ conversationId: grandchildId, minEntryId: currentMarker?.head },\n\t\t\t\t1,\n\t\t\t\tundefined,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\texpect(activeFirst.items.map(({ id }) => id)).toEqual([grandchildTail]);\n\t\t\texpect(activeFirst.next).toBeDefined();\n\t\t\tconst activeSecond = await storage.scanEntries(\n\t\t\t\t{ conversationId: grandchildId, minEntryId: currentMarker?.head },\n\t\t\t\t1,\n\t\t\t\tactiveFirst.next,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\texpect(activeSecond.items.map(({ id }) => id)).toEqual([grandchildHead]);\n\t\t\texpect(activeSecond.next).toBeUndefined();\n\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanEntries(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconversationId: grandchildId,\n\t\t\t\t\t\t\tminEntryId: historicalMarker?.head,\n\t\t\t\t\t\t\tmaxEntryId: childForkPoint,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t10,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([childForkPoint, rootForkPoint, rootFirst]);\n\n\t\t\texpect(await storage.entry(rootFirst, context)).toEqual({\n\t\t\t\tentry: entry(rootFirst, rootId),\n\t\t\t\tcommitSeq: rootEntriesSeq,\n\t\t\t});\n\t\t\texpect((await storage.entry(rootForkPoint, context))?.commitSeq).toBe(rootEntriesSeq);\n\t\t\texpect((await storage.entry(grandchildHead, context))?.commitSeq).toBe(grandchildEntriesSeq);\n\t\t\texpect((await storage.entry(grandchildTail, context))?.commitSeq).toBe(grandchildEntriesSeq);\n\t\t\texpect(await storage.entry(idFromNumber<EntryId>(999_999), context)).toBeUndefined();\n\n\t\t\texpect(await storage.entry(grandchildId, rootFirst, context)).toEqual({\n\t\t\t\tentry: entry(rootFirst, rootId),\n\t\t\t\tcommitSeq: rootEntriesSeq,\n\t\t\t});\n\t\t\texpect((await storage.entry(grandchildId, childForkPoint, context))?.entry.conversationId).toBe(childId);\n\t\t\texpect((await storage.entry(grandchildId, grandchildTail, context))?.commitSeq).toBe(grandchildEntriesSeq);\n\t\t\texpect(await storage.entry(grandchildId, rootExcludedSameCommit, context)).toBeUndefined();\n\t\t\texpect(await storage.entry(grandchildId, rootExcludedLater, context)).toBeUndefined();\n\t\t\texpect(await storage.entry(grandchildId, childExcluded, context)).toBeUndefined();\n\t\t\texpect(await storage.entry(grandchildId, childExcludedLater, context)).toBeUndefined();\n\t\t\texpect(await storage.entry(rootId, grandchildHead, context)).toBeUndefined();\n\t\t\texpect(await storage.entry(grandchildId, idFromNumber<EntryId>(999_999), context)).toBeUndefined();\n\t\t\tawait expect(storage.entry(idFromNumber<ConversationId>(999_999), rootFirst, context)).rejects.toThrow(\n\t\t\t\t\"Unknown conversation\",\n\t\t\t);\n\t\t\tawait expect(\n\t\t\t\tstorage.scanEntries({ conversationId: idFromNumber<ConversationId>(999_999) }, 10, undefined, context),\n\t\t\t).rejects.toThrow(\"Unknown conversation\");\n\t\t}),\n\n\t\tcreateCase(options, \"replaces complete task records and pages filtered task scans\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst firstId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst secondId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst thirdId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst first = { ...pendingTask(firstId, rootId), memos: { winner: \"first\" } } satisfies StoredTask;\n\t\t\tconst second = { ...pendingTask(secondId, rootId), background: true } satisfies StoredTask;\n\t\t\tconst third = { ...pendingTask(thirdId, rootId), abortRequested: true } satisfies StoredTask;\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"task\", value: first },\n\t\t\t\t\t{ type: \"task\", value: second },\n\t\t\t\t\t{ type: \"task\", value: third },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tconst running: StoredTask = {\n\t\t\t\t...first,\n\t\t\t\tstate: { status: \"running\", checkpoint: { phase: \"effect\", attempt: 1 } },\n\t\t\t\tabortRequested: true,\n\t\t\t};\n\t\t\tawait storage.commit([{ type: \"task\", value: running }], context);\n\t\t\texpect(await storage.task(firstId, context)).toEqual(running);\n\t\t\tconst terminal: StoredTask = {\n\t\t\t\tid: firstId,\n\t\t\t\tconversationId: rootId,\n\t\t\t\tkind: first.kind,\n\t\t\t\tversion: first.version,\n\t\t\t\tinput: first.input,\n\t\t\t\tstate: { status: \"terminal\", outcome: { status: \"completed\", result: { entryId: 99 } } },\n\t\t\t\tafter: [],\n\t\t\t\tbackground: false,\n\t\t\t\tabortRequested: true,\n\t\t\t};\n\t\t\tawait storage.commit([{ type: \"task\", value: terminal }], context);\n\t\t\texpect(await storage.task(firstId, context)).toEqual(terminal);\n\n\t\t\tconst pendingPage = await storage.scanTasks({ status: \"pending\" }, 1, undefined, context);\n\t\t\texpect(pendingPage.items.map(({ id }) => id)).toEqual([secondId]);\n\t\t\texpect(pendingPage.next).toBeDefined();\n\t\t\texpect(\n\t\t\t\t(await storage.scanTasks({ status: \"pending\" }, 1, pendingPage.next, context)).items.map(({ id }) => id),\n\t\t\t).toEqual([thirdId]);\n\t\t\texpect(\n\t\t\t\t(await storage.scanTasks({ status: \"terminal\", abortRequested: true }, 10, undefined, context)).items,\n\t\t\t).toEqual([terminal]);\n\t\t\texpect(\n\t\t\t\t(await storage.scanTasks({ background: true }, 10, undefined, context)).items.map(({ id }) => id),\n\t\t\t).toEqual([secondId]);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"indexes request IDs per conversation and replaces complete submission records\",\n\t\t\tasync (storage) => {\n\t\t\t\tconst rootId = await createRoot(storage);\n\t\t\t\tconst secondConversationId = await storage.mintId<ConversationId>();\n\t\t\t\tawait storage.commit([{ type: \"conversation\", value: { id: secondConversationId } }], context);\n\t\t\t\tconst firstId = await storage.mintId<SubmissionId>();\n\t\t\t\tconst secondId = await storage.mintId<SubmissionId>();\n\t\t\t\tconst otherConversationId = await storage.mintId<SubmissionId>();\n\t\t\t\tconst first: SubmissionRecord = {\n\t\t\t\t\tid: firstId,\n\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\trequestId: \"same\",\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t};\n\t\t\t\tconst second: SubmissionRecord = {\n\t\t\t\t\tid: secondId,\n\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\trequestId: \"other\",\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t};\n\t\t\t\tconst otherConversation: SubmissionRecord = {\n\t\t\t\t\tid: otherConversationId,\n\t\t\t\t\tconversationId: secondConversationId,\n\t\t\t\t\trequestId: \"same\",\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t};\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ type: \"submission\", value: first },\n\t\t\t\t\t\t{ type: \"submission\", value: second },\n\t\t\t\t\t\t{ type: \"submission\", value: otherConversation },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(await storage.submissionByRequest(rootId, \"same\", context)).toEqual(first);\n\t\t\t\texpect(await storage.submissionByRequest(secondConversationId, \"same\", context)).toEqual(otherConversation);\n\n\t\t\t\tconst placedSecond: SubmissionRecord = {\n\t\t\t\t\t...second,\n\t\t\t\t\tstatus: \"placed\",\n\t\t\t\t\tentry: await storage.mintId<EntryId>(),\n\t\t\t\t};\n\t\t\t\tawait storage.commit([{ type: \"submission\", value: placedSecond }], context);\n\t\t\t\texpect(await storage.submission(secondId, context)).toEqual(placedSecond);\n\t\t\t\texpect(await storage.submissionByRequest(rootId, \"other\", context)).toEqual(placedSecond);\n\n\t\t\t\tconst ids = async (query: SubmissionQuery) => {\n\t\t\t\t\tconst found: SubmissionId[] = [];\n\t\t\t\t\tlet cursor: Cursor | undefined;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tconst page = await storage.scanSubmissions(query, 1, cursor, context);\n\t\t\t\t\t\tfound.push(...page.items.map(({ id }) => id));\n\t\t\t\t\t\tcursor = page.next;\n\t\t\t\t\t} while (cursor !== undefined);\n\t\t\t\t\treturn found;\n\t\t\t\t};\n\t\t\t\texpect(await ids({})).toEqual([firstId, secondId, otherConversationId]);\n\t\t\t\texpect(await ids({ conversationId: rootId })).toEqual([firstId, secondId]);\n\t\t\t\t// A status change moves the record between status scans.\n\t\t\t\texpect(await ids({ status: \"queued\" })).toEqual([firstId, otherConversationId]);\n\t\t\t\texpect(await ids({ status: \"placed\" })).toEqual([secondId]);\n\t\t\t\texpect(await ids({ conversationId: secondConversationId, status: \"queued\" })).toEqual([\n\t\t\t\t\totherConversationId,\n\t\t\t\t]);\n\t\t\t\texpect(await ids({ conversationId: secondConversationId, status: \"placed\" })).toEqual([]);\n\t\t\t\texpect((await storage.scanSubmissions({ status: \"placed\" }, 10, undefined, context)).items).toEqual([\n\t\t\t\t\tplacedSecond,\n\t\t\t\t]);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(options, \"stores passive write submissions without input-only lifecycle states\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst doneId = await storage.mintId<SubmissionId>();\n\t\t\tconst failedId = await storage.mintId<SubmissionId>();\n\t\t\tconst queuedDone: SubmissionRecord = {\n\t\t\t\tid: doneId,\n\t\t\t\tconversationId: rootId,\n\t\t\t\trequestId: \"passive-done\",\n\t\t\t\ttype: \"write\",\n\t\t\t\tstatus: \"queued\",\n\t\t\t};\n\t\t\tconst queuedFailed: SubmissionRecord = {\n\t\t\t\tid: failedId,\n\t\t\t\tconversationId: rootId,\n\t\t\t\trequestId: \"passive-failed\",\n\t\t\t\ttype: \"write\",\n\t\t\t\tstatus: \"queued\",\n\t\t\t};\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"submission\", value: queuedDone },\n\t\t\t\t\t{ type: \"submission\", value: queuedFailed },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\tconst done: SubmissionRecord = {\n\t\t\t\t...queuedDone,\n\t\t\t\tstatus: \"done\",\n\t\t\t\tentry: await storage.mintId<EntryId>(),\n\t\t\t};\n\t\t\tconst unanswered: SubmissionRecord = {\n\t\t\t\t...queuedFailed,\n\t\t\t\tstatus: \"unanswered\",\n\t\t\t\treason: \"closed\",\n\t\t\t\tdetail: { retryable: false },\n\t\t\t};\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"submission\", value: done },\n\t\t\t\t\t{ type: \"submission\", value: unanswered },\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\texpect(await storage.submission(doneId, context)).toEqual(done);\n\t\t\texpect(await storage.submissionByRequest(rootId, \"passive-done\", context)).toEqual(done);\n\t\t\texpect(await storage.submission(failedId, context)).toEqual(unanswered);\n\t\t\texpect(await storage.submissionByRequest(rootId, \"passive-failed\", context)).toEqual(unanswered);\n\t\t}),\n\n\t\tcreateCase(options, \"reconstructs rewindable documents and preserves half-open incarnations\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst firstId = await storage.mintId<DocumentId>();\n\t\t\tconst firstRecord = {\n\t\t\t\tid: firstId,\n\t\t\t\tkind: \"conversation.notes\",\n\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\thistory: \"rewindable\",\n\t\t\t\tfork: \"asOf\",\n\t\t\t} satisfies DocumentCreate;\n\t\t\tconst initial: JsonObject = { items: [\"a\"], nested: { count: 1 } };\n\t\t\tconst createdAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: firstRecord,\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: initial },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst appended = [\"b\"];\n\t\t\tconst ops: Op[] = [\n\t\t\t\t[\"p\", [\"items\"], 1, 0, appended],\n\t\t\t\t[\"s\", [\"nested\", \"count\"], 2],\n\t\t\t];\n\t\t\tconst changedAt = await storage.commit(\n\t\t\t\t[{ type: \"document.change\", id: firstId, content: { kind: \"delta\", version: 1, ops } }],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\t(initial.items as string[]).push(\"caller mutation\");\n\t\t\tappended.push(\"caller mutation\");\n\t\t\texpect(await storage.document(firstId, createdAt, context)).toMatchObject({\n\t\t\t\tversion: 1,\n\t\t\t\tvalue: { items: [\"a\"], nested: { count: 1 } },\n\t\t\t\tdeltasSinceBase: 0,\n\t\t\t});\n\t\t\tconst changed = (await storage.document(firstId, changedAt, context))!;\n\t\t\texpect(changed.value).toEqual({ items: [\"a\", \"b\"], nested: { count: 2 } });\n\t\t\texpect(changed.deltasSinceBase).toBe(1);\n\t\t\t(changed.value.items as string[]).push(\"read mutation\");\n\t\t\texpect((await storage.document(firstId, \"current\", context))?.value).toEqual({\n\t\t\t\titems: [\"a\", \"b\"],\n\t\t\t\tnested: { count: 2 },\n\t\t\t});\n\n\t\t\tconst checkpointAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\tid: firstId,\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 2, value: { items: [\"checkpoint\"], nested: { count: 3 } } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst replacedAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\tid: firstId,\n\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\tkind: \"delta\",\n\t\t\t\t\t\t\tversion: 2,\n\t\t\t\t\t\t\tops: [[\"r\", { items: [\"replacement\"], nested: { count: 4 } }]],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\texpect(await storage.document(firstId, changedAt, context)).toMatchObject({\n\t\t\t\tversion: 1,\n\t\t\t\tvalue: { items: [\"a\", \"b\"], nested: { count: 2 } },\n\t\t\t});\n\t\t\texpect(await storage.document(firstId, checkpointAt, context)).toMatchObject({\n\t\t\t\tversion: 2,\n\t\t\t\tvalue: { items: [\"checkpoint\"], nested: { count: 3 } },\n\t\t\t\tdeltasSinceBase: 0,\n\t\t\t});\n\t\t\texpect(await storage.document(firstId, replacedAt, context)).toMatchObject({\n\t\t\t\tvalue: { items: [\"replacement\"], nested: { count: 4 } },\n\t\t\t\tdeltasSinceBase: 1,\n\t\t\t});\n\t\t\texpect((await storage.document(firstId, \"current\", context))?.deltasSinceBase).toBe(1);\n\n\t\t\tconst secondId = await storage.mintId<DocumentId>();\n\t\t\tconst retiredAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: { ...firstRecord, id: secondId },\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { items: [\"new\"] } },\n\t\t\t\t\t},\n\t\t\t\t\t{ type: \"document.retire\", id: firstId },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\tid: firstId,\n\t\t\t\t\t\tcontent: { kind: \"delta\", version: 2, ops: [[\"s\", [\"retiring\"], true]] },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst address = { kind: firstRecord.kind, scope: firstRecord.scope };\n\t\t\texpect((await storage.findDocument(address, changedAt, context))?.id).toBe(firstId);\n\t\t\texpect(await storage.findDocument(address, retiredAt, context)).toMatchObject({\n\t\t\t\tid: secondId,\n\t\t\t\tcreatedAt: retiredAt,\n\t\t\t});\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanDocuments({ scope: firstRecord.scope, at: changedAt }, 10, undefined, context)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([firstId]);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanDocuments({ scope: firstRecord.scope, at: retiredAt }, 10, undefined, context)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([secondId]);\n\t\t\texpect(await storage.document(firstId, retiredAt, context)).toBeUndefined();\n\t\t\texpect((await storage.document(secondId, \"current\", context))?.value).toEqual({ items: [\"new\"] });\n\t\t}),\n\n\t\tcreateCase(options, \"streams long document tails across root replacement deltas\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\tconst record = {\n\t\t\t\tid,\n\t\t\t\tkind: \"conversation.long-tail\",\n\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\thistory: \"rewindable\",\n\t\t\t\tfork: \"asOf\",\n\t\t\t} satisfies DocumentCreate;\n\t\t\tconst initial = {\n\t\t\t\trevision: 0,\n\t\t\t\trows: Array.from({ length: 512 }, (_, value) => ({ value, stable: `row-${value}` })),\n\t\t\t};\n\t\t\tconst createdAt = await storage.commit(\n\t\t\t\t[{ type: \"document.create\", record, content: { kind: \"base\", version: 1, value: initial } }],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst beforeReplacement = structuredClone(initial);\n\t\t\tlet beforeReplacementAt = createdAt;\n\t\t\tfor (let revision = 1; revision <= 24; revision++) {\n\t\t\t\tconst index = (revision * 17) % beforeReplacement.rows.length;\n\t\t\t\tbeforeReplacement.rows[index]!.value = -revision;\n\t\t\t\tbeforeReplacement.revision = revision;\n\t\t\t\tbeforeReplacementAt = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\tkind: \"delta\",\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\tops: [\n\t\t\t\t\t\t\t\t\t[\"s\", [\"rows\", index, \"value\"], -revision],\n\t\t\t\t\t\t\t\t\t[\"s\", [\"revision\"], revision],\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst replacement = {\n\t\t\t\trevision: 100,\n\t\t\t\trows: Array.from({ length: 512 }, (_, value) => ({ value: 10_000 + value, stable: `new-${value}` })),\n\t\t\t};\n\t\t\tconst replacementSnapshot = structuredClone(replacement);\n\t\t\tconst replacementAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"r\", replacement]] },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\treplacement.rows[0]!.value = -999;\n\n\t\t\tconst current = structuredClone(replacementSnapshot);\n\t\t\tfor (let revision = 101; revision <= 124; revision++) {\n\t\t\t\tconst index = (revision * 19) % current.rows.length;\n\t\t\t\tcurrent.rows[index]!.value = -revision;\n\t\t\t\tcurrent.revision = revision;\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\tkind: \"delta\",\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\tops: [\n\t\t\t\t\t\t\t\t\t[\"s\", [\"rows\", index, \"value\"], -revision],\n\t\t\t\t\t\t\t\t\t[\"s\", [\"revision\"], revision],\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\texpect((await storage.document(id, createdAt, context))?.value).toEqual(initial);\n\t\t\texpect((await storage.document(id, beforeReplacementAt, context))?.value).toEqual(beforeReplacement);\n\t\t\texpect((await storage.document(id, replacementAt, context))?.value).toEqual(replacementSnapshot);\n\t\t\tconst read = (await storage.document(id, \"current\", context))!;\n\t\t\texpect(read.value).toEqual(current);\n\t\t\t(read.value.rows as Array<{ value: number }>)[0]!.value = -1_000;\n\t\t\texpect((await storage.document(id, \"current\", context))?.value).toEqual(current);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"copies stored document bases independently and rejects ambiguous sources\",\n\t\t\tasync (storage) => {\n\t\t\t\tconst rootId = await createRoot(storage);\n\t\t\t\tconst childId = await storage.mintId<ConversationId>();\n\t\t\t\tconst secondChildId = await storage.mintId<ConversationId>();\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ type: \"conversation\", value: { id: childId } },\n\t\t\t\t\t\t{ type: \"conversation\", value: { id: secondChildId } },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tconst sourceId = await storage.mintId<DocumentId>();\n\t\t\t\tconst sourceRecord = {\n\t\t\t\t\tid: sourceId,\n\t\t\t\t\tkind: \"copy.source\",\n\t\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\t\thistory: \"rewindable\",\n\t\t\t\t\tfork: \"asOf\",\n\t\t\t\t} satisfies DocumentCreate;\n\t\t\t\tconst createdAt = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\trecord: sourceRecord,\n\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 2, value: { count: 1, rows: [{ value: \"base\" }] } },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid: sourceId,\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\tkind: \"delta\",\n\t\t\t\t\t\t\t\tversion: 2,\n\t\t\t\t\t\t\t\tops: [\n\t\t\t\t\t\t\t\t\t[\"s\", [\"count\"], 2],\n\t\t\t\t\t\t\t\t\t[\"p\", [\"rows\"], 1, 0, [{ value: \"current\" }]],\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tconst historicalCopyId = await storage.mintId<DocumentId>();\n\t\t\t\tconst currentCopyId = await storage.mintId<DocumentId>();\n\t\t\t\tconst retiredCopyId = await storage.mintId<DocumentId>();\n\t\t\t\tconst childRecord = (id: DocumentId, conversationId: ConversationId): DocumentCreate => ({\n\t\t\t\t\tid,\n\t\t\t\t\tkind: sourceRecord.kind,\n\t\t\t\t\tscope: { kind: \"conversation\", conversationId },\n\t\t\t\t\thistory: \"rewindable\",\n\t\t\t\t\tfork: \"asOf\",\n\t\t\t\t});\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\trecord: childRecord(historicalCopyId, childId),\n\t\t\t\t\t\t\tsource: { id: sourceId, at: createdAt },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\trecord: childRecord(currentCopyId, secondChildId),\n\t\t\t\t\t\t\tsource: { id: sourceId, at: \"current\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\trecord: childRecord(retiredCopyId, rootId),\n\t\t\t\t\t\t\tsource: { id: sourceId, at: \"current\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ type: \"document.retire\", id: retiredCopyId },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(await storage.document(historicalCopyId, \"current\", context)).toMatchObject({\n\t\t\t\t\tversion: 2,\n\t\t\t\t\tvalue: { count: 1, rows: [{ value: \"base\" }] },\n\t\t\t\t});\n\t\t\t\texpect(await storage.document(currentCopyId, \"current\", context)).toMatchObject({\n\t\t\t\t\tversion: 2,\n\t\t\t\t\tvalue: { count: 2, rows: [{ value: \"base\" }, { value: \"current\" }] },\n\t\t\t\t});\n\t\t\t\texpect(await storage.document(retiredCopyId, \"current\", context)).toBeUndefined();\n\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid: sourceId,\n\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 2, value: { count: 99, rows: [] } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ type: \"document.retire\", id: sourceId },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect((await storage.document(currentCopyId, \"current\", context))?.value).toEqual({\n\t\t\t\t\tcount: 2,\n\t\t\t\t\trows: [{ value: \"base\" }, { value: \"current\" }],\n\t\t\t\t});\n\n\t\t\t\tconst latestSourceId = await storage.mintId<DocumentId>();\n\t\t\t\tconst latestCopyId = await storage.mintId<DocumentId>();\n\t\t\t\tconst latestSource = {\n\t\t\t\t\tid: latestSourceId,\n\t\t\t\t\tkind: \"copy.latest\",\n\t\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\t\thistory: \"latest\",\n\t\t\t\t\tfork: \"current\",\n\t\t\t\t} satisfies DocumentCreate;\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\trecord: latestSource,\n\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 4, value: { retained: \"copy\" } },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\t\t...latestSource,\n\t\t\t\t\t\t\t\tid: latestCopyId,\n\t\t\t\t\t\t\t\tscope: { kind: \"conversation\", conversationId: childId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsource: { id: latestSourceId, at: \"current\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid: latestSourceId,\n\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 4, value: { retained: \"source-only\" } },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ type: \"document.retire\", id: latestSourceId },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(await storage.document(latestCopyId, \"current\", context)).toMatchObject({\n\t\t\t\t\tversion: 4,\n\t\t\t\t\tvalue: { retained: \"copy\" },\n\t\t\t\t});\n\n\t\t\t\tconst conflictId = await storage.mintId<DocumentId>();\n\t\t\t\tlet conflictError: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tawait storage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\t\trecord: childRecord(conflictId, childId),\n\t\t\t\t\t\t\t\tsource: { id: currentCopyId, at: \"current\" },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: \"document.retire\", id: currentCopyId },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconflictError = error;\n\t\t\t\t}\n\t\t\t\texpect((conflictError as Error | undefined)?.name).toBe(\"StorageRejected\");\n\t\t\t\texpect(await storage.document(conflictId, \"current\", context)).toBeUndefined();\n\t\t\t\texpect((await storage.document(currentCopyId, \"current\", context))?.value).toEqual({\n\t\t\t\t\tcount: 2,\n\t\t\t\t\trows: [{ value: \"base\" }, { value: \"current\" }],\n\t\t\t\t});\n\n\t\t\t\tconst mismatchId = await storage.mintId<DocumentId>();\n\t\t\t\tlet mismatchError: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tawait storage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"document.copy\",\n\t\t\t\t\t\t\t\trecord: { ...childRecord(mismatchId, childId), kind: \"copy.mismatch\" },\n\t\t\t\t\t\t\t\tsource: { id: currentCopyId, at: \"current\" },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tmismatchError = error;\n\t\t\t\t}\n\t\t\t\texpect((mismatchError as Error | undefined)?.name).toBe(\"StorageRejected\");\n\t\t\t\texpect(await storage.document(mismatchId, \"current\", context)).toBeUndefined();\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"uses bases for version transitions and rejects historical reads of current-only documents\",\n\t\t\tasync (storage) => {\n\t\t\t\tawait createRoot(storage);\n\t\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\t\tconst record = {\n\t\t\t\t\tid,\n\t\t\t\t\tkind: \"session.settings\",\n\t\t\t\t\tscope: { kind: \"session\" },\n\t\t\t\t} satisfies DocumentCreate;\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[{ type: \"document.create\", record, content: { kind: \"base\", version: 1, value: { count: 1 } } }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[{ type: \"document.change\", id, content: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], 2]] } }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tconst migratedAt = await storage.commit(\n\t\t\t\t\t[{ type: \"document.change\", id, content: { kind: \"base\", version: 2, value: { count: 3 } } }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(await storage.document(id, \"current\", context)).toMatchObject({ version: 2, value: { count: 3 } });\n\t\t\t\tawait expect(storage.document(id, migratedAt, context)).rejects.toThrow(\n\t\t\t\t\t\"does not retain historical content\",\n\t\t\t\t);\n\n\t\t\t\tawait expect(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[{ type: \"document.change\", id, content: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], 4]] } }],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t),\n\t\t\t\t).rejects.toThrow(\"version transition requires a base\");\n\t\t\t\texpect((await storage.document(id, \"current\", context))?.value).toEqual({ count: 3 });\n\t\t\t\tawait storage.commit([{ type: \"document.retire\", id }], context);\n\t\t\t\texpect(await storage.document(id, \"current\", context)).toBeUndefined();\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(options, \"indexes logical addresses and exact-scope scans independently\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst firstId = await storage.mintId<DocumentId>();\n\t\t\tconst secondId = await storage.mintId<DocumentId>();\n\t\t\tconst conversationId = await storage.mintId<DocumentId>();\n\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst taskSingletonId = await storage.mintId<DocumentId>();\n\t\t\tconst taskFamilyId = await storage.mintId<DocumentId>();\n\t\t\tconst taskOtherKindId = await storage.mintId<DocumentId>();\n\t\t\tconst createdAt = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"task\", value: pendingTask(taskId, rootId) },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: firstId,\n\t\t\t\t\t\t\tkind: \"cache\",\n\t\t\t\t\t\t\tscope: { kind: \"session\" },\n\t\t\t\t\t\t\tkey: \"__proto__\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"first\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: secondId,\n\t\t\t\t\t\t\tkind: \"cache\",\n\t\t\t\t\t\t\tscope: { kind: \"session\" },\n\t\t\t\t\t\t\tkey: \"constructor\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"second\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: conversationId,\n\t\t\t\t\t\t\tkind: \"cache\",\n\t\t\t\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\t\t\t\thistory: \"latest\",\n\t\t\t\t\t\t\tfork: \"current\",\n\t\t\t\t\t\t\tkey: \"__proto__\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"conversation\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: taskSingletonId,\n\t\t\t\t\t\t\tkind: \"task.cache\",\n\t\t\t\t\t\t\tscope: { kind: \"task\", taskId },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"singleton\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: taskFamilyId,\n\t\t\t\t\t\t\tkind: \"task.cache\",\n\t\t\t\t\t\t\tscope: { kind: \"task\", taskId },\n\t\t\t\t\t\t\tkey: \"member\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"family\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\tid: taskOtherKindId,\n\t\t\t\t\t\t\tkind: \"task.other\",\n\t\t\t\t\t\t\tscope: { kind: \"task\", taskId },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { owner: \"other\" } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{ kind: \"cache\", scope: { kind: \"session\" }, key: \"__proto__\" },\n\t\t\t\t\t\t\"current\",\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t)?.id,\n\t\t\t).toBe(firstId);\n\t\t\texpect(\n\t\t\t\t(await storage.scanDocuments({ scope: { kind: \"session\" }, at: \"current\" }, 1, undefined, context)).items,\n\t\t\t).toHaveLength(1);\n\t\t\tconst first = await storage.scanDocuments(\n\t\t\t\t{ scope: { kind: \"session\" }, at: \"current\" },\n\t\t\t\t1,\n\t\t\t\tundefined,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst second = await storage.scanDocuments(\n\t\t\t\t{ scope: { kind: \"session\" }, at: \"current\" },\n\t\t\t\t1,\n\t\t\t\tfirst.next,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\texpect([...first.items, ...second.items].map(({ id }) => id)).toEqual([firstId, secondId]);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanDocuments(\n\t\t\t\t\t\t{ scope: { kind: \"conversation\", conversationId: rootId }, at: \"current\" },\n\t\t\t\t\t\t10,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([conversationId]);\n\t\t\texpect(\n\t\t\t\t(await storage.findDocument({ kind: \"task.cache\", scope: { kind: \"task\", taskId } }, \"current\", context))\n\t\t\t\t\t?.id,\n\t\t\t).toBe(taskSingletonId);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{ kind: \"task.cache\", scope: { kind: \"task\", taskId }, key: \"member\" },\n\t\t\t\t\t\t\"current\",\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t)?.id,\n\t\t\t).toBe(taskFamilyId);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanDocuments(\n\t\t\t\t\t\t{ scope: { kind: \"task\", taskId }, at: \"current\", kind: \"task.cache\" },\n\t\t\t\t\t\t10,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([taskSingletonId, taskFamilyId]);\n\t\t\tawait expect(storage.document(taskSingletonId, createdAt, context)).rejects.toThrow(\n\t\t\t\t\"does not retain historical content\",\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"keeps document lifecycle failures atomic and gives create-plus-retire an empty lifetime\",\n\t\t\tasync (storage) => {\n\t\t\t\tconst rootId = await createRoot(storage);\n\t\t\t\tconst firstId = await storage.mintId<DocumentId>();\n\t\t\t\tconst secondId = await storage.mintId<DocumentId>();\n\t\t\t\tconst record = {\n\t\t\t\t\tid: firstId,\n\t\t\t\t\tkind: \"singleton\",\n\t\t\t\t\tscope: { kind: \"session\" },\n\t\t\t\t} satisfies DocumentCreate;\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[{ type: \"document.create\", record, content: { kind: \"base\", version: 1, value: { value: 1 } } }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\tawait expect(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\t\trecord: { ...record, id: secondId },\n\t\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { value: 2 } },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: \"document.change\", id: firstId, content: { kind: \"delta\", version: 1, ops: [] } },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t),\n\t\t\t\t).rejects.toThrow(\"already has a current incarnation\");\n\t\t\t\texpect((await storage.document(firstId, \"current\", context))?.value).toEqual({ value: 1 });\n\t\t\t\texpect(await storage.document(secondId, \"current\", context)).toBeUndefined();\n\n\t\t\t\tconst emptyId = await storage.mintId<DocumentId>();\n\t\t\t\tconst emptyAt = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\trecord: {\n\t\t\t\t\t\t\t\tid: emptyId,\n\t\t\t\t\t\t\t\tkind: record.kind,\n\t\t\t\t\t\t\t\tkey: \"empty\",\n\t\t\t\t\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\t\t\t\t\thistory: \"rewindable\",\n\t\t\t\t\t\t\t\tfork: \"initial\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: {} },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ type: \"document.retire\", id: emptyId },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(await storage.document(emptyId, \"current\", context)).toBeUndefined();\n\t\t\t\texpect(await storage.document(emptyId, emptyAt, context)).toBeUndefined();\n\t\t\t\texpect(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: record.kind,\n\t\t\t\t\t\t\tscope: { kind: \"conversation\", conversationId: rootId },\n\t\t\t\t\t\t\tkey: \"empty\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\temptyAt,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t),\n\t\t\t\t).toBeUndefined();\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\toptions,\n\t\t\t\"rolls back record tables and secondary indexes when a document command fails\",\n\t\t\tasync (storage) => {\n\t\t\t\tconst rootId = await createRoot(storage);\n\t\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\t\tconst submissionId = await storage.mintId<SubmissionId>();\n\t\t\t\tconst documentId = await storage.mintId<DocumentId>();\n\t\t\t\tconst task = pendingTask(taskId, rootId);\n\t\t\t\tconst submission: SubmissionRecord = {\n\t\t\t\t\tid: submissionId,\n\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\trequestId: \"atomic\",\n\t\t\t\t\ttype: \"input\",\n\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t};\n\t\t\t\tconst record = {\n\t\t\t\t\tid: documentId,\n\t\t\t\t\tkind: \"atomic\",\n\t\t\t\t\tscope: { kind: \"session\" },\n\t\t\t\t} satisfies DocumentCreate;\n\t\t\t\tconst baselineSeq = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ type: \"task\", value: task },\n\t\t\t\t\t\t{ type: \"submission\", value: submission },\n\t\t\t\t\t\t{ type: \"document.create\", record, content: { kind: \"base\", version: 1, value: { count: 1 } } },\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\n\t\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\t\tconst conflictingDocumentId = await storage.mintId<DocumentId>();\n\t\t\t\tawait expect(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"task\",\n\t\t\t\t\t\t\t\tvalue: { ...task, state: { status: \"running\", checkpoint: { phase: \"effect\" } } },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"submission\",\n\t\t\t\t\t\t\t\tvalue: { ...submission, status: \"unanswered\", reason: \"failed\" },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: \"entry\", value: entry(entryId, rootId, \"transient\") },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\t\t\trecord: { ...record, id: conflictingDocumentId },\n\t\t\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { count: 2 } },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t),\n\t\t\t\t).rejects.toThrow(\"already has a current incarnation\");\n\n\t\t\t\texpect(await storage.task(taskId, context)).toEqual(task);\n\t\t\t\texpect((await storage.scanTasks({ status: \"pending\" }, 10, undefined, context)).items).toEqual([task]);\n\t\t\t\texpect(await storage.submissionByRequest(rootId, \"atomic\", context)).toEqual(submission);\n\t\t\t\texpect(await storage.entry(entryId, context)).toBeUndefined();\n\t\t\t\texpect(await storage.document(conflictingDocumentId, \"current\", context)).toBeUndefined();\n\t\t\t\texpect(\n\t\t\t\t\t(await storage.findDocument({ kind: record.kind, scope: record.scope }, \"current\", context))?.id,\n\t\t\t\t).toBe(documentId);\n\t\t\t\tconst afterRollbackSeq = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\t\t\tid: documentId,\n\t\t\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], 3]] },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t\texpect(afterRollbackSeq).toBeGreaterThan(baselineSeq);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(options, \"keeps indexed string identities lossless\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst first = \"\\ud800\";\n\t\t\tconst second = \"\\ud801\";\n\t\t\tconst firstTaskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst secondTaskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst firstSubmissionId = await storage.mintId<SubmissionId>();\n\t\t\tconst secondSubmissionId = await storage.mintId<SubmissionId>();\n\t\t\tconst firstKindDocumentId = await storage.mintId<DocumentId>();\n\t\t\tconst secondKindDocumentId = await storage.mintId<DocumentId>();\n\t\t\tconst firstKeyDocumentId = await storage.mintId<DocumentId>();\n\t\t\tconst secondKeyDocumentId = await storage.mintId<DocumentId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"task\", value: { ...pendingTask(firstTaskId, rootId), kind: first } },\n\t\t\t\t\t{ type: \"task\", value: { ...pendingTask(secondTaskId, rootId), kind: second } },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"submission\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid: firstSubmissionId,\n\t\t\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\t\t\trequestId: first,\n\t\t\t\t\t\t\ttype: \"input\",\n\t\t\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"submission\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid: secondSubmissionId,\n\t\t\t\t\t\t\tconversationId: rootId,\n\t\t\t\t\t\t\trequestId: second,\n\t\t\t\t\t\t\ttype: \"input\",\n\t\t\t\t\t\t\tstatus: \"queued\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: { id: firstKindDocumentId, kind: first, scope: { kind: \"session\" } },\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { identity: \"first kind\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: { id: secondKindDocumentId, kind: second, scope: { kind: \"session\" } },\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { identity: \"second kind\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: { id: firstKeyDocumentId, kind: \"family\", key: first, scope: { kind: \"session\" } },\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { identity: \"first key\" } },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\t\trecord: { id: secondKeyDocumentId, kind: \"family\", key: second, scope: { kind: \"session\" } },\n\t\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { identity: \"second key\" } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\texpect((await storage.scanTasks({ kind: first }, 10, undefined, context)).items.map(({ id }) => id)).toEqual([\n\t\t\t\tfirstTaskId,\n\t\t\t]);\n\t\t\texpect((await storage.scanTasks({ kind: second }, 10, undefined, context)).items.map(({ id }) => id)).toEqual([\n\t\t\t\tsecondTaskId,\n\t\t\t]);\n\t\t\texpect((await storage.task(firstTaskId, context))?.kind).toBe(first);\n\t\t\texpect((await storage.task(secondTaskId, context))?.kind).toBe(second);\n\t\t\texpect((await storage.submissionByRequest(rootId, first, context))?.requestId).toBe(first);\n\t\t\texpect((await storage.submissionByRequest(rootId, first, context))?.id).toBe(firstSubmissionId);\n\t\t\texpect((await storage.submissionByRequest(rootId, second, context))?.id).toBe(secondSubmissionId);\n\t\t\texpect((await storage.findDocument({ kind: first, scope: { kind: \"session\" } }, \"current\", context))?.id).toBe(\n\t\t\t\tfirstKindDocumentId,\n\t\t\t);\n\t\t\texpect(\n\t\t\t\t(await storage.findDocument({ kind: second, scope: { kind: \"session\" } }, \"current\", context))?.id,\n\t\t\t).toBe(secondKindDocumentId);\n\t\t\texpect(\n\t\t\t\t(await storage.findDocument({ kind: \"family\", key: first, scope: { kind: \"session\" } }, \"current\", context))\n\t\t\t\t\t?.id,\n\t\t\t).toBe(firstKeyDocumentId);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{ kind: \"family\", key: second, scope: { kind: \"session\" } },\n\t\t\t\t\t\t\"current\",\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t)?.id,\n\t\t\t).toBe(secondKeyDocumentId);\n\t\t\texpect(\n\t\t\t\t(\n\t\t\t\t\tawait storage.scanDocuments(\n\t\t\t\t\t\t{ scope: { kind: \"session\" }, at: \"current\", kind: first },\n\t\t\t\t\t\t10,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t)\n\t\t\t\t).items.map(({ id }) => id),\n\t\t\t).toEqual([firstKindDocumentId]);\n\t\t}),\n\n\t\tcreateCase(options, \"keeps one global record ID namespace and rejects exhausted ID minting\", async (storage) => {\n\t\t\tconst rootId = await createRoot(storage);\n\t\t\tconst explicitEntryId = idFromNumber<EntryId>(100);\n\t\t\tawait storage.commit([{ type: \"entry\", value: entry(explicitEntryId, rootId) }], context);\n\t\t\texpect(await storage.mintId<EntryId>()).toBe(101);\n\t\t\tawait expect(\n\t\t\t\tstorage.commit(\n\t\t\t\t\t[{ type: \"task\", value: pendingTask(idFromNumber<TaskId<JsonValue>>(explicitEntryId), rootId) }],\n\t\t\t\t\tcontext,\n\t\t\t\t),\n\t\t\t).rejects.toThrow(`ID ${explicitEntryId} already belongs to entry`);\n\n\t\t\tawait storage.commit(\n\t\t\t\t[{ type: \"entry\", value: entry(idFromNumber<EntryId>(Number.MAX_SAFE_INTEGER), rootId, \"last-id\") }],\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tawait expect(storage.mintId<EntryId>()).rejects.toThrow(\"ID space is exhausted\");\n\t\t\tawait expect(storage.mintId<EntryId>()).rejects.toThrow(\"ID space is exhausted\");\n\t\t}),\n\n\t\tcreateCase(options, \"rejects every operation after close\", async (storage) => {\n\t\t\tawait createRoot(storage);\n\t\t\tawait storage.close(context);\n\t\t\tawait expect(storage.conversation(ROOT_CONVERSATION_ID, context)).rejects.toThrow(\"closed\");\n\t\t\tawait expect(storage.commit([] satisfies StorageWrite[], context)).rejects.toThrow(\"closed\");\n\t\t\tawait expect(storage.mintId<ConversationId>()).rejects.toThrow(\"closed\");\n\t\t}),\n\t];\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Storage } from "../types.ts";
|
|
2
|
+
export interface StorageConformanceAssertions {
|
|
3
|
+
ok(value: unknown, message?: string): void;
|
|
4
|
+
strictEqual(actual: unknown, expected: unknown): void;
|
|
5
|
+
deepEqual(actual: unknown, expected: unknown): void;
|
|
6
|
+
partialDeepEqual(actual: unknown, expected: unknown): void;
|
|
7
|
+
greaterThan(actual: number, expected: number): void;
|
|
8
|
+
rejects(operation: Promise<unknown>, messageIncludes: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export type StorageConformanceProvider = (use: (storage: Storage) => Promise<void>) => Promise<void>;
|
|
11
|
+
export interface StorageConformanceOptions {
|
|
12
|
+
readonly assertions: StorageConformanceAssertions;
|
|
13
|
+
readonly withStorage: StorageConformanceProvider;
|
|
14
|
+
}
|
|
15
|
+
export interface StorageConformanceCase {
|
|
16
|
+
readonly name: string;
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC5C,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErG,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACjD;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Storage } from \"../types.ts\";\n\nexport interface StorageConformanceAssertions {\n\tok(value: unknown, message?: string): void;\n\tstrictEqual(actual: unknown, expected: unknown): void;\n\tdeepEqual(actual: unknown, expected: unknown): void;\n\tpartialDeepEqual(actual: unknown, expected: unknown): void;\n\tgreaterThan(actual: number, expected: number): void;\n\trejects(operation: Promise<unknown>, messageIncludes: string): Promise<void>;\n}\n\nexport type StorageConformanceProvider = (use: (storage: Storage) => Promise<void>) => Promise<void>;\n\nexport interface StorageConformanceOptions {\n\treadonly assertions: StorageConformanceAssertions;\n\treadonly withStorage: StorageConformanceProvider;\n}\n\nexport interface StorageConformanceCase {\n\treadonly name: string;\n\trun(): Promise<void>;\n}\n"]}
|