@m4ike1/ion-agent-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +622 -0
- package/dist/agent-loop.d.ts +24 -0
- package/dist/agent-loop.d.ts.map +1 -0
- package/dist/agent-loop.js +560 -0
- package/dist/agent-loop.js.map +1 -0
- package/dist/agent.d.ts +122 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +422 -0
- package/dist/agent.js.map +1 -0
- package/dist/harness/agent-harness.d.ts +716 -0
- package/dist/harness/agent-harness.d.ts.map +1 -0
- package/dist/harness/agent-harness.js +6 -0
- package/dist/harness/agent-harness.js.map +1 -0
- package/dist/harness/compaction/branch-summarization.d.ts +68 -0
- package/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/harness/compaction/branch-summarization.js +176 -0
- package/dist/harness/compaction/branch-summarization.js.map +1 -0
- package/dist/harness/compaction/compaction.d.ts +126 -0
- package/dist/harness/compaction/compaction.d.ts.map +1 -0
- package/dist/harness/compaction/compaction.js +560 -0
- package/dist/harness/compaction/compaction.js.map +1 -0
- package/dist/harness/compaction/utils.d.ts +25 -0
- package/dist/harness/compaction/utils.d.ts.map +1 -0
- package/dist/harness/compaction/utils.js +120 -0
- package/dist/harness/compaction/utils.js.map +1 -0
- package/dist/harness/config.d.ts +9 -0
- package/dist/harness/config.d.ts.map +1 -0
- package/dist/harness/config.js +35 -0
- package/dist/harness/config.js.map +1 -0
- package/dist/harness/context.d.ts +9 -0
- package/dist/harness/context.d.ts.map +1 -0
- package/dist/harness/context.js +13 -0
- package/dist/harness/context.js.map +1 -0
- package/dist/harness/env/nodejs.d.ts +43 -0
- package/dist/harness/env/nodejs.d.ts.map +1 -0
- package/dist/harness/env/nodejs.js +865 -0
- package/dist/harness/env/nodejs.js.map +1 -0
- package/dist/harness/events.d.ts +25 -0
- package/dist/harness/events.d.ts.map +1 -0
- package/dist/harness/events.js +250 -0
- package/dist/harness/events.js.map +1 -0
- package/dist/harness/execution/assistant.d.ts +42 -0
- package/dist/harness/execution/assistant.d.ts.map +1 -0
- package/dist/harness/execution/assistant.js +82 -0
- package/dist/harness/execution/assistant.js.map +1 -0
- package/dist/harness/execution/effect-gate.d.ts +22 -0
- package/dist/harness/execution/effect-gate.d.ts.map +1 -0
- package/dist/harness/execution/effect-gate.js +49 -0
- package/dist/harness/execution/effect-gate.js.map +1 -0
- package/dist/harness/execution/tools.d.ts +67 -0
- package/dist/harness/execution/tools.d.ts.map +1 -0
- package/dist/harness/execution/tools.js +121 -0
- package/dist/harness/execution/tools.js.map +1 -0
- package/dist/harness/hooks.d.ts +38 -0
- package/dist/harness/hooks.d.ts.map +1 -0
- package/dist/harness/hooks.js +406 -0
- package/dist/harness/hooks.js.map +1 -0
- package/dist/harness/messages.d.ts +51 -0
- package/dist/harness/messages.d.ts.map +1 -0
- package/dist/harness/messages.js +102 -0
- package/dist/harness/messages.js.map +1 -0
- package/dist/harness/prompt-templates.d.ts +49 -0
- package/dist/harness/prompt-templates.d.ts.map +1 -0
- package/dist/harness/prompt-templates.js +225 -0
- package/dist/harness/prompt-templates.js.map +1 -0
- package/dist/harness/result.d.ts +133 -0
- package/dist/harness/result.d.ts.map +1 -0
- package/dist/harness/result.js +81 -0
- package/dist/harness/result.js.map +1 -0
- package/dist/harness/runtime/drive/boundary.d.ts +28 -0
- package/dist/harness/runtime/drive/boundary.d.ts.map +1 -0
- package/dist/harness/runtime/drive/boundary.js +173 -0
- package/dist/harness/runtime/drive/boundary.js.map +1 -0
- package/dist/harness/runtime/drive/checkpoint.d.ts +8 -0
- package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -0
- package/dist/harness/runtime/drive/checkpoint.js +133 -0
- package/dist/harness/runtime/drive/checkpoint.js.map +1 -0
- package/dist/harness/runtime/drive/deferred.d.ts +15 -0
- package/dist/harness/runtime/drive/deferred.d.ts.map +1 -0
- package/dist/harness/runtime/drive/deferred.js +179 -0
- package/dist/harness/runtime/drive/deferred.js.map +1 -0
- package/dist/harness/runtime/drive/generation.d.ts +8 -0
- package/dist/harness/runtime/drive/generation.d.ts.map +1 -0
- package/dist/harness/runtime/drive/generation.js +205 -0
- package/dist/harness/runtime/drive/generation.js.map +1 -0
- package/dist/harness/runtime/drive/reconcile.d.ts +5 -0
- package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -0
- package/dist/harness/runtime/drive/reconcile.js +140 -0
- package/dist/harness/runtime/drive/reconcile.js.map +1 -0
- package/dist/harness/runtime/drive/recovery.d.ts +8 -0
- package/dist/harness/runtime/drive/recovery.d.ts.map +1 -0
- package/dist/harness/runtime/drive/recovery.js +85 -0
- package/dist/harness/runtime/drive/recovery.js.map +1 -0
- package/dist/harness/runtime/drive/response.d.ts +23 -0
- package/dist/harness/runtime/drive/response.d.ts.map +1 -0
- package/dist/harness/runtime/drive/response.js +394 -0
- package/dist/harness/runtime/drive/response.js.map +1 -0
- package/dist/harness/runtime/drive/retry.d.ts +4 -0
- package/dist/harness/runtime/drive/retry.d.ts.map +1 -0
- package/dist/harness/runtime/drive/retry.js +34 -0
- package/dist/harness/runtime/drive/retry.js.map +1 -0
- package/dist/harness/runtime/drive/structural.d.ts +32 -0
- package/dist/harness/runtime/drive/structural.d.ts.map +1 -0
- package/dist/harness/runtime/drive/structural.js +929 -0
- package/dist/harness/runtime/drive/structural.js.map +1 -0
- package/dist/harness/runtime/drive/terminal.d.ts +7 -0
- package/dist/harness/runtime/drive/terminal.d.ts.map +1 -0
- package/dist/harness/runtime/drive/terminal.js +49 -0
- package/dist/harness/runtime/drive/terminal.js.map +1 -0
- package/dist/harness/runtime/drive/tool-placement.d.ts +14 -0
- package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -0
- package/dist/harness/runtime/drive/tool-placement.js +244 -0
- package/dist/harness/runtime/drive/tool-placement.js.map +1 -0
- package/dist/harness/runtime/drive/tools.d.ts +6 -0
- package/dist/harness/runtime/drive/tools.d.ts.map +1 -0
- package/dist/harness/runtime/drive/tools.js +449 -0
- package/dist/harness/runtime/drive/tools.js.map +1 -0
- package/dist/harness/runtime/drive.d.ts +6 -0
- package/dist/harness/runtime/drive.d.ts.map +1 -0
- package/dist/harness/runtime/drive.js +93 -0
- package/dist/harness/runtime/drive.js.map +1 -0
- package/dist/harness/runtime/harness.d.ts +59 -0
- package/dist/harness/runtime/harness.d.ts.map +1 -0
- package/dist/harness/runtime/harness.js +311 -0
- package/dist/harness/runtime/harness.js.map +1 -0
- package/dist/harness/runtime/index.d.ts +2 -0
- package/dist/harness/runtime/index.d.ts.map +1 -0
- package/dist/harness/runtime/index.js +2 -0
- package/dist/harness/runtime/index.js.map +1 -0
- package/dist/harness/runtime/lane.d.ts +101 -0
- package/dist/harness/runtime/lane.d.ts.map +1 -0
- package/dist/harness/runtime/lane.js +1575 -0
- package/dist/harness/runtime/lane.js.map +1 -0
- package/dist/harness/runtime/progress.d.ts +15 -0
- package/dist/harness/runtime/progress.d.ts.map +1 -0
- package/dist/harness/runtime/progress.js +66 -0
- package/dist/harness/runtime/progress.js.map +1 -0
- package/dist/harness/runtime/reducer.d.ts +5 -0
- package/dist/harness/runtime/reducer.d.ts.map +1 -0
- package/dist/harness/runtime/reducer.js +240 -0
- package/dist/harness/runtime/reducer.js.map +1 -0
- package/dist/harness/runtime/restore.d.ts +24 -0
- package/dist/harness/runtime/restore.d.ts.map +1 -0
- package/dist/harness/runtime/restore.js +117 -0
- package/dist/harness/runtime/restore.js.map +1 -0
- package/dist/harness/runtime/transcript.d.ts +21 -0
- package/dist/harness/runtime/transcript.d.ts.map +1 -0
- package/dist/harness/runtime/transcript.js +72 -0
- package/dist/harness/runtime/transcript.js.map +1 -0
- package/dist/harness/runtime/types.d.ts +105 -0
- package/dist/harness/runtime/types.d.ts.map +1 -0
- package/dist/harness/runtime/types.js +61 -0
- package/dist/harness/runtime/types.js.map +1 -0
- package/dist/harness/session/commit.d.ts +53 -0
- package/dist/harness/session/commit.d.ts.map +1 -0
- package/dist/harness/session/commit.js +57 -0
- package/dist/harness/session/commit.js.map +1 -0
- package/dist/harness/session/context.d.ts +10 -0
- package/dist/harness/session/context.d.ts.map +1 -0
- package/dist/harness/session/context.js +49 -0
- package/dist/harness/session/context.js.map +1 -0
- package/dist/harness/session/fork-policy.d.ts +21 -0
- package/dist/harness/session/fork-policy.d.ts.map +1 -0
- package/dist/harness/session/fork-policy.js +55 -0
- package/dist/harness/session/fork-policy.js.map +1 -0
- package/dist/harness/session/fork.d.ts +16 -0
- package/dist/harness/session/fork.d.ts.map +1 -0
- package/dist/harness/session/fork.js +79 -0
- package/dist/harness/session/fork.js.map +1 -0
- package/dist/harness/session/in-memory-storage-state.d.ts +39 -0
- package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -0
- package/dist/harness/session/in-memory-storage-state.js +276 -0
- package/dist/harness/session/in-memory-storage-state.js.map +1 -0
- package/dist/harness/session/index.d.ts +11 -0
- package/dist/harness/session/index.d.ts.map +1 -0
- package/dist/harness/session/index.js +9 -0
- package/dist/harness/session/index.js.map +1 -0
- package/dist/harness/session/jsonl/codec.d.ts +21 -0
- package/dist/harness/session/jsonl/codec.d.ts.map +1 -0
- package/dist/harness/session/jsonl/codec.js +45 -0
- package/dist/harness/session/jsonl/codec.js.map +1 -0
- package/dist/harness/session/jsonl/fork.d.ts +38 -0
- package/dist/harness/session/jsonl/fork.d.ts.map +1 -0
- package/dist/harness/session/jsonl/fork.js +264 -0
- package/dist/harness/session/jsonl/fork.js.map +1 -0
- package/dist/harness/session/jsonl/index.d.ts +4 -0
- package/dist/harness/session/jsonl/index.d.ts.map +1 -0
- package/dist/harness/session/jsonl/index.js +4 -0
- package/dist/harness/session/jsonl/index.js.map +1 -0
- package/dist/harness/session/jsonl/io.d.ts +14 -0
- package/dist/harness/session/jsonl/io.d.ts.map +1 -0
- package/dist/harness/session/jsonl/io.js +86 -0
- package/dist/harness/session/jsonl/io.js.map +1 -0
- package/dist/harness/session/jsonl/legacy-v3.d.ts +43 -0
- package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -0
- package/dist/harness/session/jsonl/legacy-v3.js +462 -0
- package/dist/harness/session/jsonl/legacy-v3.js.map +1 -0
- package/dist/harness/session/jsonl/repo.d.ts +35 -0
- package/dist/harness/session/jsonl/repo.d.ts.map +1 -0
- package/dist/harness/session/jsonl/repo.js +301 -0
- package/dist/harness/session/jsonl/repo.js.map +1 -0
- package/dist/harness/session/jsonl/storage.d.ts +40 -0
- package/dist/harness/session/jsonl/storage.d.ts.map +1 -0
- package/dist/harness/session/jsonl/storage.js +200 -0
- package/dist/harness/session/jsonl/storage.js.map +1 -0
- package/dist/harness/session/jsonl/types.d.ts +39 -0
- package/dist/harness/session/jsonl/types.d.ts.map +1 -0
- package/dist/harness/session/jsonl/types.js +3 -0
- package/dist/harness/session/jsonl/types.js.map +1 -0
- package/dist/harness/session/memory.d.ts +48 -0
- package/dist/harness/session/memory.d.ts.map +1 -0
- package/dist/harness/session/memory.js +369 -0
- package/dist/harness/session/memory.js.map +1 -0
- package/dist/harness/session/mutation-line.d.ts +8 -0
- package/dist/harness/session/mutation-line.d.ts.map +1 -0
- package/dist/harness/session/mutation-line.js +21 -0
- package/dist/harness/session/mutation-line.js.map +1 -0
- package/dist/harness/session/session.d.ts +82 -0
- package/dist/harness/session/session.d.ts.map +1 -0
- package/dist/harness/session/session.js +361 -0
- package/dist/harness/session/session.js.map +1 -0
- package/dist/harness/session/testing/benchmark/datasets.d.ts +12 -0
- package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/datasets.js +24 -0
- package/dist/harness/session/testing/benchmark/datasets.js.map +1 -0
- package/dist/harness/session/testing/benchmark/session-repo.d.ts +42 -0
- package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/session-repo.js +127 -0
- package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -0
- package/dist/harness/session/testing/benchmark/storage.d.ts +25 -0
- package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/storage.js +114 -0
- package/dist/harness/session/testing/benchmark/storage.js.map +1 -0
- package/dist/harness/session/testing/conformance/session-repo.d.ts +23 -0
- package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -0
- package/dist/harness/session/testing/conformance/session-repo.js +809 -0
- package/dist/harness/session/testing/conformance/session-repo.js.map +1 -0
- package/dist/harness/session/testing/conformance/storage.d.ts +4 -0
- package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -0
- package/dist/harness/session/testing/conformance/storage.js +600 -0
- package/dist/harness/session/testing/conformance/storage.js.map +1 -0
- package/dist/harness/session/testing/gating-storage.d.ts +26 -0
- package/dist/harness/session/testing/gating-storage.d.ts.map +1 -0
- package/dist/harness/session/testing/gating-storage.js +100 -0
- package/dist/harness/session/testing/gating-storage.js.map +1 -0
- package/dist/harness/session/testing/index.d.ts +10 -0
- package/dist/harness/session/testing/index.d.ts.map +1 -0
- package/dist/harness/session/testing/index.js +9 -0
- package/dist/harness/session/testing/index.js.map +1 -0
- package/dist/harness/session/testing/instrumented-storage.d.ts +11 -0
- package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -0
- package/dist/harness/session/testing/instrumented-storage.js +16 -0
- package/dist/harness/session/testing/instrumented-storage.js.map +1 -0
- package/dist/harness/session/testing/storage-decorator.d.ts +20 -0
- package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -0
- package/dist/harness/session/testing/storage-decorator.js +41 -0
- package/dist/harness/session/testing/storage-decorator.js.map +1 -0
- package/dist/harness/session/testing/types.d.ts +12 -0
- package/dist/harness/session/testing/types.d.ts.map +1 -0
- package/dist/harness/session/testing/types.js +2 -0
- package/dist/harness/session/testing/types.js.map +1 -0
- package/dist/harness/session/types.d.ts +512 -0
- package/dist/harness/session/types.d.ts.map +1 -0
- package/dist/harness/session/types.js +9 -0
- package/dist/harness/session/types.js.map +1 -0
- package/dist/harness/session/values.d.ts +95 -0
- package/dist/harness/session/values.d.ts.map +1 -0
- package/dist/harness/session/values.js +81 -0
- package/dist/harness/session/values.js.map +1 -0
- package/dist/harness/skills.d.ts +46 -0
- package/dist/harness/skills.d.ts.map +1 -0
- package/dist/harness/skills.js +326 -0
- package/dist/harness/skills.js.map +1 -0
- package/dist/harness/system-prompt.d.ts +3 -0
- package/dist/harness/system-prompt.d.ts.map +1 -0
- package/dist/harness/system-prompt.js +30 -0
- package/dist/harness/system-prompt.js.map +1 -0
- package/dist/harness/telemetry.d.ts +1242 -0
- package/dist/harness/telemetry.d.ts.map +1 -0
- package/dist/harness/telemetry.js +527 -0
- package/dist/harness/telemetry.js.map +1 -0
- package/dist/harness/tools/bash.d.ts +27 -0
- package/dist/harness/tools/bash.d.ts.map +1 -0
- package/dist/harness/tools/bash.js +105 -0
- package/dist/harness/tools/bash.js.map +1 -0
- package/dist/harness/tools/edit-diff.d.ts +89 -0
- package/dist/harness/tools/edit-diff.d.ts.map +1 -0
- package/dist/harness/tools/edit-diff.js +386 -0
- package/dist/harness/tools/edit-diff.js.map +1 -0
- package/dist/harness/tools/edit.d.ts +19 -0
- package/dist/harness/tools/edit.d.ts.map +1 -0
- package/dist/harness/tools/edit.js +108 -0
- package/dist/harness/tools/edit.js.map +1 -0
- package/dist/harness/tools/file-mutation-queue.d.ts +5 -0
- package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/harness/tools/file-mutation-queue.js +46 -0
- package/dist/harness/tools/file-mutation-queue.js.map +1 -0
- package/dist/harness/tools/image.d.ts +3 -0
- package/dist/harness/tools/image.d.ts.map +1 -0
- package/dist/harness/tools/image.js +106 -0
- package/dist/harness/tools/image.js.map +1 -0
- package/dist/harness/tools/index.d.ts +6 -0
- package/dist/harness/tools/index.d.ts.map +1 -0
- package/dist/harness/tools/index.js +5 -0
- package/dist/harness/tools/index.js.map +1 -0
- package/dist/harness/tools/path-utils.d.ts +5 -0
- package/dist/harness/tools/path-utils.d.ts.map +1 -0
- package/dist/harness/tools/path-utils.js +26 -0
- package/dist/harness/tools/path-utils.js.map +1 -0
- package/dist/harness/tools/read.d.ts +35 -0
- package/dist/harness/tools/read.d.ts.map +1 -0
- package/dist/harness/tools/read.js +108 -0
- package/dist/harness/tools/read.js.map +1 -0
- package/dist/harness/tools/tool-context.d.ts +6 -0
- package/dist/harness/tools/tool-context.d.ts.map +1 -0
- package/dist/harness/tools/tool-context.js +2 -0
- package/dist/harness/tools/tool-context.js.map +1 -0
- package/dist/harness/tools/write.d.ts +11 -0
- package/dist/harness/tools/write.d.ts.map +1 -0
- package/dist/harness/tools/write.js +31 -0
- package/dist/harness/tools/write.js.map +1 -0
- package/dist/harness/types.d.ts +305 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +75 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/harness/utils/adaptive-publisher.d.ts +24 -0
- package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -0
- package/dist/harness/utils/adaptive-publisher.js +79 -0
- package/dist/harness/utils/adaptive-publisher.js.map +1 -0
- package/dist/harness/utils/output-capture.d.ts +31 -0
- package/dist/harness/utils/output-capture.d.ts.map +1 -0
- package/dist/harness/utils/output-capture.js +217 -0
- package/dist/harness/utils/output-capture.js.map +1 -0
- package/dist/harness/utils/shell-output.d.ts +29 -0
- package/dist/harness/utils/shell-output.d.ts.map +1 -0
- package/dist/harness/utils/shell-output.js +71 -0
- package/dist/harness/utils/shell-output.js.map +1 -0
- package/dist/harness/utils/truncate.d.ts +71 -0
- package/dist/harness/utils/truncate.d.ts.map +1 -0
- package/dist/harness/utils/truncate.js +296 -0
- package/dist/harness/utils/truncate.js.map +1 -0
- package/dist/harness/utils/usage.d.ts +4 -0
- package/dist/harness/utils/usage.d.ts.map +1 -0
- package/dist/harness/utils/usage.js +33 -0
- package/dist/harness/utils/usage.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -0
- package/dist/proxy.d.ts +72 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +310 -0
- package/dist/proxy.js.map +1 -0
- package/dist/search/index.d.ts +29 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +2 -0
- package/dist/search/index.js.map +1 -0
- package/dist/stream-fn.d.ts +10 -0
- package/dist/stream-fn.d.ts.map +1 -0
- package/dist/stream-fn.js +17 -0
- package/dist/stream-fn.js.map +1 -0
- package/dist/types.d.ts +416 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-repo.js","sourceRoot":"","sources":["../../../../../src/harness/session/testing/conformance/session-repo.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepStrictEqual, rejects, strictEqual } from \"node:assert/strict\";\nimport type { AssistantMessage, StopReason } from \"@m4ike1/ion-ai\";\nimport { BACKGROUND_CONTEXT } from \"../../../context.ts\";\nimport { insertEntry, insertUsage } from \"../../commit.ts\";\nimport type {\n\tJsonValue,\n\tLaneConfiguration,\n\tLaneState,\n\tSession,\n\tSessionMetadata,\n\tSessionRepo,\n\tUsageRow,\n} from \"../../types.ts\";\nimport {\n\tappendList,\n\tbranchTip,\n\tdeleteList,\n\tentryLabel,\n\tlaneConfig,\n\tlaneState,\n\tlist,\n\toperationMeta,\n\toperationPreparation,\n\toperationResult,\n\toperationState,\n\toperationToolArgs,\n\tpendingEntry,\n\tsessionName,\n\tsetValue,\n\tvalue,\n} from \"../../values.ts\";\nimport type { ConformanceCase } from \"../types.ts\";\n\nconst ROOT_ID = \"00000000-0000-7000-8000-000000000001\";\nconst CHILD_ID = \"00000000-0000-7000-8000-000000000002\";\nconst SIBLING_ID = \"00000000-0000-7000-8000-000000000003\";\nconst USAGE_ID = \"00000000-0000-7000-8000-000000000004\";\nconst OPERATION_ID = \"00000000-0000-7000-8000-000000000005\";\nconst PENDING_ID = \"00000000-0000-7000-8000-000000000006\";\nconst UNKNOWN_ID = \"00000000-0000-7000-8000-000000000007\";\nconst idleLaneState = {\n\tcurrentOperationId: null,\n\tlastOperationId: null,\n\tinbox: [],\n} satisfies LaneState;\nconst applicationValue = value<JsonValue>(\"test.application.value\");\nconst applicationList = list<JsonValue>(\"test.application.list\");\nconst configuration = {\n\tmodel: { provider: \"provider\", modelId: \"model\" },\n\tthinkingLevel: \"off\",\n\tactiveToolNames: [\"read\"],\n} satisfies LaneConfiguration;\n\nasync function getBranchTip(session: Session, name = \"main\"): Promise<string | null | undefined> {\n\treturn (await session.branch(name, BACKGROUND_CONTEXT))?.getTipId(BACKGROUND_CONTEXT);\n}\n\nfunction assistantMessage(stopReason: StopReason): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent:\n\t\t\tstopReason === \"toolUse\"\n\t\t\t\t? [{ type: \"toolCall\", id: \"call\", name: \"read\", arguments: {} }]\n\t\t\t\t: [{ type: \"text\", text: stopReason }],\n\t\tapi: \"anthropic-messages\",\n\t\tprovider: \"anthropic\",\n\t\tmodel: \"claude-sonnet-4-5\",\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason,\n\t\t...(stopReason === \"deferred\"\n\t\t\t? {\n\t\t\t\t\tdeferred: {\n\t\t\t\t\t\tprovider: \"anthropic\",\n\t\t\t\t\t\tmodelId: \"claude-sonnet-4-5\",\n\t\t\t\t\t\tapi: \"anthropic-messages\",\n\t\t\t\t\t\tid: \"job\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\ttimestamp: 1,\n\t};\n}\n\nfunction usageRow(): Omit<UsageRow, \"seq\"> {\n\treturn {\n\t\tid: USAGE_ID,\n\t\tadjustment: true,\n\t\tusage: {\n\t\t\tinput: 1,\n\t\t\toutput: 2,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 3,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t};\n}\n\ninterface RepoCaseContext<TRepo> {\n\trepo: TRepo;\n\tclose?: () => void | Promise<void>;\n}\n\nfunction prepareRepoCaseFactory<TRepo>(\n\tfactory: () => Promise<TRepo>,\n\tonClose?: () => void | Promise<void>,\n): () => Promise<RepoCaseContext<TRepo>> {\n\treturn async () => ({\n\t\trepo: await factory(),\n\t\t...(onClose === undefined ? {} : { close: onClose }),\n\t});\n}\n\nfunction createCase<TRepo>(\n\tfactory: () => Promise<RepoCaseContext<TRepo>>,\n\tgroup: string,\n\tname: string,\n\ttest: (context: { repo: TRepo }) => Promise<void>,\n): ConformanceCase {\n\treturn {\n\t\tgroup,\n\t\tname,\n\t\tasync run() {\n\t\t\tconst context = await factory();\n\t\t\ttry {\n\t\t\t\tawait test(context);\n\t\t\t} finally {\n\t\t\t\tawait context.close?.();\n\t\t\t}\n\t\t},\n\t};\n}\n\n/** Creates lifecycle cases for repositories that support creation, discovery, open, and deletion. */\nexport function createSessionRepoLifecycleConformance<TMetadata extends SessionMetadata>(\n\t// Require only the methods this group exercises so partial backends can run it independently.\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"open\" | \"list\" | \"delete\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lifecycle\",\n\t\t\t\"creates a session with no implicit branch and rejects duplicate ids\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst session = await repo.create({ id: \"session\" }, BACKGROUND_CONTEXT);\n\n\t\t\t\tstrictEqual(session.metadata.id, \"session\");\n\t\t\t\tstrictEqual(Number.isSafeInteger(session.metadata.createdAt), true);\n\t\t\t\tstrictEqual(session.metadata.storageVersion, 1);\n\t\t\t\tstrictEqual(await session.branch(\"main\", BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await session.getValue(laneState(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await session.getValue(laneConfig(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tawait rejects(repo.create({ id: \"session\" }, BACKGROUND_CONTEXT));\n\t\t\t\tawait session.close(BACKGROUND_CONTEXT);\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lifecycle\",\n\t\t\t\"close drains an acquired scope and rejects a queued mutation callback\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst session = await repo.create({ id: \"session\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst active = await session.beginMutation(BACKGROUND_CONTEXT);\n\t\t\t\tlet queuedStarted = false;\n\t\t\t\tconst queued = session.mutate(() => {\n\t\t\t\t\tqueuedStarted = true;\n\t\t\t\t}, BACKGROUND_CONTEXT);\n\t\t\t\tvoid queued.catch(() => {});\n\t\t\t\tconst closing = session.close(BACKGROUND_CONTEXT);\n\n\t\t\t\tawait active.end(BACKGROUND_CONTEXT);\n\t\t\t\tawait rejects(queued);\n\t\t\t\tawait closing;\n\t\t\t\tstrictEqual(queuedStarted, false);\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lifecycle\",\n\t\t\t\"lists metadata and preserves state across close and reopen\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst first = await repo.create({ id: \"first\" }, BACKGROUND_CONTEXT);\n\t\t\t\tawait first.setName(\"preserved\", BACKGROUND_CONTEXT);\n\t\t\t\tconst second = await repo.create({ id: \"second\", parentSessionId: \"parent\" }, BACKGROUND_CONTEXT);\n\t\t\t\tawait second.close(BACKGROUND_CONTEXT);\n\n\t\t\t\tconst listed = await repo.list(undefined, BACKGROUND_CONTEXT);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tlisted\n\t\t\t\t\t\t.map(({ id, parentSessionId }) => ({ id, parentSessionId }))\n\t\t\t\t\t\t.sort((left, right) => left.id.localeCompare(right.id)),\n\t\t\t\t\t[\n\t\t\t\t\t\t{ id: \"first\", parentSessionId: undefined },\n\t\t\t\t\t\t{ id: \"second\", parentSessionId: \"parent\" },\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\tawait first.close(BACKGROUND_CONTEXT);\n\t\t\t\tawait rejects(first.getName(BACKGROUND_CONTEXT));\n\t\t\t\tconst reopened = await repo.open(first.metadata, BACKGROUND_CONTEXT);\n\t\t\t\tstrictEqual(reopened === first, false);\n\t\t\t\tstrictEqual(await reopened.getName(BACKGROUND_CONTEXT), \"preserved\");\n\t\t\t\tawait reopened.close(BACKGROUND_CONTEXT);\n\t\t\t},\n\t\t),\n\t\tcreateCase(factory, \"lifecycle\", \"deletes closed sessions without affecting other sessions\", async ({ repo }) => {\n\t\t\tconst removed = await repo.create({ id: \"removed\" }, BACKGROUND_CONTEXT);\n\t\t\tconst retained = await repo.create({ id: \"retained\" }, BACKGROUND_CONTEXT);\n\t\t\tawait Promise.all([removed.close(BACKGROUND_CONTEXT), retained.close(BACKGROUND_CONTEXT)]);\n\n\t\t\tawait repo.delete(removed.metadata, BACKGROUND_CONTEXT);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await repo.list(undefined, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t[\"retained\"],\n\t\t\t);\n\t\t\tawait rejects(repo.open(removed.metadata, BACKGROUND_CONTEXT));\n\t\t\tawait rejects(repo.delete(removed.metadata, BACKGROUND_CONTEXT));\n\t\t}),\n\t];\n}\n\n/** Creates exclusive-open cases for repositories that own active session handles. */\nexport function createSessionRepoOwnershipConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"open\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(factory, \"ownership\", \"rejects opening an already-open session\", async ({ repo }) => {\n\t\t\tconst session = await repo.create({ id: \"session\" }, BACKGROUND_CONTEXT);\n\t\t\tawait rejects(repo.open(session.metadata, BACKGROUND_CONTEXT));\n\t\t\tawait session.close(BACKGROUND_CONTEXT);\n\n\t\t\tconst reopened = await repo.open(session.metadata, BACKGROUND_CONTEXT);\n\t\t\tawait rejects(repo.open(session.metadata, BACKGROUND_CONTEXT));\n\t\t\tawait reopened.close(BACKGROUND_CONTEXT);\n\t\t}),\n\t];\n}\n\n/** Creates message cases for repositories that support session creation. */\nexport function createSessionRepoMessageConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"messages\",\n\t\t\t\"rejects pending assistant messages without changing the tree\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst session = await repo.create({ id: \"session\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst branch = await session.createBranch(\"main\", null, BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(branch.appendMessage(assistantMessage(\"pending\"), BACKGROUND_CONTEXT));\n\n\t\t\t\tstrictEqual(await getBranchTip(session), null);\n\t\t\t\tdeepStrictEqual(await session.findEntries(undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\tawait session.close(BACKGROUND_CONTEXT);\n\t\t\t},\n\t\t),\n\t\tcreateCase(factory, \"messages\", \"preserves every settled assistant stop reason\", async ({ repo }) => {\n\t\t\tconst session = await repo.create({ id: \"session\" }, BACKGROUND_CONTEXT);\n\t\t\tconst messagesByStopReason = {\n\t\t\t\tstop: assistantMessage(\"stop\"),\n\t\t\t\tlength: assistantMessage(\"length\"),\n\t\t\t\ttoolUse: assistantMessage(\"toolUse\"),\n\t\t\t\terror: assistantMessage(\"error\"),\n\t\t\t\taborted: assistantMessage(\"aborted\"),\n\t\t\t\tdeferred: assistantMessage(\"deferred\"),\n\t\t\t} satisfies Record<Exclude<StopReason, \"pending\">, AssistantMessage>;\n\t\t\tconst branch = await session.createBranch(\"main\", null, BACKGROUND_CONTEXT);\n\t\t\tconst messages = Object.values(messagesByStopReason);\n\t\t\tconst ids: string[] = [];\n\n\t\t\tfor (const message of messages) ids.push(await branch.appendMessage(message, BACKGROUND_CONTEXT));\n\n\t\t\tconst entries = await session.findEntries({ order: \"asc\", type: \"message\" }, BACKGROUND_CONTEXT);\n\t\t\tdeepStrictEqual(\n\t\t\t\tentries.map((entry) => entry.id),\n\t\t\t\tids,\n\t\t\t);\n\t\t\tfor (const [index, entry] of entries.entries()) {\n\t\t\t\tif (entry.type !== \"message\") throw new Error(\"Expected message entry\");\n\t\t\t\tdeepStrictEqual(entry.message, messages[index]);\n\t\t\t}\n\t\t\tstrictEqual(await getBranchTip(session), ids.at(-1));\n\t\t\tawait session.close(BACKGROUND_CONTEXT);\n\t\t}),\n\t];\n}\n\n/** Creates fork-content cases that do not require concurrent repository coordination. */\nexport function createSessionRepoForkBehaviorConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"list\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(factory, \"forks\", \"tree-forks a fresh session before first attachment\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tconst fork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\tstrictEqual(fork.metadata.id, \"fork\");\n\t\t\tstrictEqual(fork.metadata.parentSessionId, \"source\");\n\t\t\tstrictEqual(await fork.branch(\"main\", BACKGROUND_CONTEXT), undefined);\n\t\t\tstrictEqual(await fork.getValue(laneConfig(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\tstrictEqual(await fork.getValue(laneState(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\tdeepStrictEqual(await fork.findEntries(undefined, BACKGROUND_CONTEXT), []);\n\t\t\tdeepStrictEqual(await fork.getStats(BACKGROUND_CONTEXT), {\n\t\t\t\tmessageCount: 0,\n\t\t\t\tusage: {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\tcost: {\n\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\ttotal: 0,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork.close(BACKGROUND_CONTEXT)]);\n\t\t}),\n\t\tcreateCase(factory, \"forks\", \"rejects a data-only branch and releases its destination id\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tawait source.createBranch(\"data\", null, BACKGROUND_CONTEXT);\n\n\t\t\tawait rejects(\n\t\t\t\trepo.fork(source.metadata, { id: \"destination\", scope: \"branch\", branch: \"data\" }, BACKGROUND_CONTEXT),\n\t\t\t);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await repo.list(undefined, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t[\"source\"],\n\t\t\t);\n\n\t\t\tconst destination = await repo.create({ id: \"destination\" }, BACKGROUND_CONTEXT);\n\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), destination.close(BACKGROUND_CONTEXT)]);\n\t\t}),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"forks\",\n\t\t\t\"forks one named configured branch with scoped values and a zero ledger\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tawait source.mutate(\n\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\t\tid: ROOT_ID,\n\t\t\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\t\tcustomType: \"root\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\t\tid: CHILD_ID,\n\t\t\t\t\t\t\t\t\tparentId: ROOT_ID,\n\t\t\t\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\t\t\t\tmessage: { role: \"user\", content: \"child\", timestamp: 1 },\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\t\tid: SIBLING_ID,\n\t\t\t\t\t\t\t\t\tparentId: ROOT_ID,\n\t\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\t\tcustomType: \"sibling\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(branchTip(\"main\"), SIBLING_ID),\n\t\t\t\t\t\t\t\tsetValue(branchTip(\"review\"), CHILD_ID),\n\t\t\t\t\t\t\t\tsetValue(laneConfig(\"review\"), configuration),\n\t\t\t\t\t\t\t\tsetValue(laneState(\"review\"), {\n\t\t\t\t\t\t\t\t\tcurrentOperationId: OPERATION_ID,\n\t\t\t\t\t\t\t\t\tlastOperationId: \"previous\",\n\t\t\t\t\t\t\t\t\tinbox: [{ entryId: PENDING_ID, kind: \"write\" }],\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(operationResult(\"previous\"), {\n\t\t\t\t\t\t\t\t\toperationId: \"previous\",\n\t\t\t\t\t\t\t\t\tkind: \"navigation\",\n\t\t\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t\t\t\tfromTipId: ROOT_ID,\n\t\t\t\t\t\t\t\t\ttipId: CHILD_ID,\n\t\t\t\t\t\t\t\t\tstartedAt: 1,\n\t\t\t\t\t\t\t\t\tendedAt: 2,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(sessionName, \"source name\"),\n\t\t\t\t\t\t\t\tsetValue(applicationValue, { copied: false }),\n\t\t\t\t\t\t\t\tappendList(applicationList, { copied: false }),\n\t\t\t\t\t\t\t\tsetValue(entryLabel(ROOT_ID), \"root label\"),\n\t\t\t\t\t\t\t\tsetValue(entryLabel(SIBLING_ID), \"sibling label\"),\n\t\t\t\t\t\t\t\tsetValue(pendingEntry(PENDING_ID), {\n\t\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\t\tcustomType: \"pending\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(operationMeta(OPERATION_ID), {\n\t\t\t\t\t\t\t\t\toperationId: OPERATION_ID,\n\t\t\t\t\t\t\t\t\tlane: \"review\",\n\t\t\t\t\t\t\t\t\tsourceTipId: CHILD_ID,\n\t\t\t\t\t\t\t\t\tstartedAt: 1,\n\t\t\t\t\t\t\t\t\tintent: { kind: \"compaction\" },\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(operationState(OPERATION_ID), {\n\t\t\t\t\t\t\t\t\tat: \"summary.deciding\",\n\t\t\t\t\t\t\t\t\tcontrol: { status: \"running\" },\n\t\t\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\t\t\tcompaction: { enabled: true, reserveTokens: 1, keepRecentTokens: 1 },\n\t\t\t\t\t\t\t\t\t\tsteeringMode: \"all\",\n\t\t\t\t\t\t\t\t\t\tfollowUpMode: \"all\",\n\t\t\t\t\t\t\t\t\t\ttoolExecution: \"sequential\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tlatestAssistantEntryId: null,\n\t\t\t\t\t\t\t\t\ttask: { taskId: OPERATION_ID, reason: \"manual\", boundary: { kind: \"finish\" } },\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(operationToolArgs(OPERATION_ID, ROOT_ID, 0), {\n\t\t\t\t\t\t\t\t\targument: true,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(operationPreparation(OPERATION_ID, OPERATION_ID), {\n\t\t\t\t\t\t\t\t\tkind: \"compaction\",\n\t\t\t\t\t\t\t\t\tmessagesToSummarize: [],\n\t\t\t\t\t\t\t\t\tturnPrefixMessages: [],\n\t\t\t\t\t\t\t\t\tretainedTail: [],\n\t\t\t\t\t\t\t\t\tisSplitTurn: false,\n\t\t\t\t\t\t\t\t\ttokensBefore: 0,\n\t\t\t\t\t\t\t\t\tfileOps: { read: [], written: [], edited: [] },\n\t\t\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\t\t\t\treserveTokens: 1,\n\t\t\t\t\t\t\t\t\t\tkeepRecentTokens: 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tinsertUsage(usageRow()),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tconst fork = await repo.fork(\n\t\t\t\t\tsource.metadata,\n\t\t\t\t\t{ id: \"fork\", scope: \"branch\", branch: \"review\", entryId: CHILD_ID, position: \"at\" },\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await fork.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t\t[ROOT_ID, CHILD_ID],\n\t\t\t\t);\n\t\t\t\tstrictEqual(await fork.branch(\"main\", BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await getBranchTip(fork, \"review\"), CHILD_ID);\n\t\t\t\tdeepStrictEqual((await fork.getValue(laneConfig(\"review\"), BACKGROUND_CONTEXT))?.value, configuration);\n\t\t\t\tdeepStrictEqual((await fork.getValue(laneState(\"review\"), BACKGROUND_CONTEXT))?.value, idleLaneState);\n\t\t\t\tstrictEqual(await fork.getValue(laneConfig(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getValue(laneState(\"main\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getName(BACKGROUND_CONTEXT), \"source name\");\n\t\t\t\tstrictEqual(await fork.getValue(applicationValue, BACKGROUND_CONTEXT), undefined);\n\t\t\t\tdeepStrictEqual(await fork.readList(applicationList, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\tstrictEqual(await fork.getLabel(ROOT_ID, BACKGROUND_CONTEXT), \"root label\");\n\t\t\t\tstrictEqual(await fork.getLabel(SIBLING_ID, BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getValue(operationResult(\"previous\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getValue(pendingEntry(PENDING_ID), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getValue(operationMeta(OPERATION_ID), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(await fork.getValue(operationState(OPERATION_ID), BACKGROUND_CONTEXT), undefined);\n\t\t\t\tstrictEqual(\n\t\t\t\t\tawait fork.getValue(operationToolArgs(OPERATION_ID, ROOT_ID, 0), BACKGROUND_CONTEXT),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tstrictEqual(\n\t\t\t\t\tawait fork.getValue(operationPreparation(OPERATION_ID, OPERATION_ID), BACKGROUND_CONTEXT),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tconst stats = await fork.getStats(BACKGROUND_CONTEXT);\n\t\t\t\tstrictEqual(stats.messageCount, 1);\n\t\t\t\tdeepStrictEqual(stats.usage, {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t});\n\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork.close(BACKGROUND_CONTEXT)]);\n\t\t\t},\n\t\t),\n\t\tcreateCase(factory, \"forks\", \"enforces branch ancestry for at and before placement\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tawait source.mutate(\n\t\t\t\t(mutator) =>\n\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinsertEntry({ id: ROOT_ID, parentId: null, type: \"custom\", customType: \"root\" }),\n\t\t\t\t\t\t\tinsertEntry({ id: CHILD_ID, parentId: ROOT_ID, type: \"custom\", customType: \"child\" }),\n\t\t\t\t\t\t\tinsertEntry({ id: SIBLING_ID, parentId: ROOT_ID, type: \"custom\", customType: \"sibling\" }),\n\t\t\t\t\t\t\tsetValue(branchTip(\"main\"), CHILD_ID),\n\t\t\t\t\t\t\tsetValue(laneConfig(\"main\"), configuration),\n\t\t\t\t\t\t\tsetValue(laneState(\"main\"), idleLaneState),\n\t\t\t\t\t\t\tsetValue(branchTip(\"empty\"), null),\n\t\t\t\t\t\t\tsetValue(laneConfig(\"empty\"), configuration),\n\t\t\t\t\t\t\tsetValue(laneState(\"empty\"), idleLaneState),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tconst before = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"before\", scope: \"branch\", branch: \"main\", entryId: CHILD_ID, position: \"before\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(before), ROOT_ID);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await before.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t[ROOT_ID],\n\t\t\t);\n\n\t\t\tconst mid = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"mid\", scope: \"branch\", branch: \"main\", entryId: ROOT_ID, position: \"at\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(mid), ROOT_ID);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await mid.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t[ROOT_ID],\n\t\t\t);\n\n\t\t\tconst beforeRoot = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"before-root\", scope: \"branch\", branch: \"main\", entryId: ROOT_ID, position: \"before\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(beforeRoot), null);\n\t\t\tdeepStrictEqual(await beforeRoot.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), []);\n\n\t\t\tconst empty = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"empty\", scope: \"branch\", branch: \"empty\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(empty, \"empty\"), null);\n\t\t\tdeepStrictEqual(await empty.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), []);\n\n\t\t\tfor (const [id, branch, entryId] of [\n\t\t\t\t[\"off-branch\", \"main\", SIBLING_ID],\n\t\t\t\t[\"unknown\", \"main\", UNKNOWN_ID],\n\t\t\t\t[\"null-tip\", \"empty\", ROOT_ID],\n\t\t\t] as const) {\n\t\t\t\tawait rejects(repo.fork(source.metadata, { id, scope: \"branch\", branch, entryId }, BACKGROUND_CONTEXT));\n\t\t\t}\n\t\t\tdeepStrictEqual((await repo.list(undefined, BACKGROUND_CONTEXT)).map(({ id }) => id).sort(), [\n\t\t\t\t\"before\",\n\t\t\t\t\"before-root\",\n\t\t\t\t\"empty\",\n\t\t\t\t\"mid\",\n\t\t\t\t\"source\",\n\t\t\t]);\n\t\t\tawait Promise.all([\n\t\t\t\tsource.close(BACKGROUND_CONTEXT),\n\t\t\t\tbefore.close(BACKGROUND_CONTEXT),\n\t\t\t\tbeforeRoot.close(BACKGROUND_CONTEXT),\n\t\t\t\tempty.close(BACKGROUND_CONTEXT),\n\t\t\t\tmid.close(BACKGROUND_CONTEXT),\n\t\t\t]);\n\t\t}),\n\t\tcreateCase(factory, \"forks\", \"forks a closed source session\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tawait source.mutate(\n\t\t\t\t(mutator) =>\n\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\tid: ROOT_ID,\n\t\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"root\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsetValue(branchTip(\"main\"), ROOT_ID),\n\t\t\t\t\t\t\tsetValue(laneConfig(\"main\"), configuration),\n\t\t\t\t\t\t\tsetValue(laneState(\"main\"), idleLaneState),\n\t\t\t\t\t\t\tsetValue(applicationValue, \"excluded\"),\n\t\t\t\t\t\t\tappendList(applicationList, \"excluded\"),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tawait source.close(BACKGROUND_CONTEXT);\n\n\t\t\tconst fork = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"fork\", scope: \"branch\", branch: \"main\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(fork), ROOT_ID);\n\t\t\tdeepStrictEqual((await fork.getValue(laneConfig(\"main\"), BACKGROUND_CONTEXT))?.value, configuration);\n\t\t\tdeepStrictEqual((await fork.getValue(laneState(\"main\"), BACKGROUND_CONTEXT))?.value, idleLaneState);\n\t\t\tstrictEqual(await fork.getValue(applicationValue, BACKGROUND_CONTEXT), undefined);\n\t\t\tdeepStrictEqual(await fork.readList(applicationList, undefined, BACKGROUND_CONTEXT), []);\n\t\t\tawait fork.close(BACKGROUND_CONTEXT);\n\t\t}),\n\n\t\tcreateCase(factory, \"forks\", \"forks the whole configured tree with fresh lane state\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tawait source.mutate(\n\t\t\t\t(mutator) =>\n\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\tid: ROOT_ID,\n\t\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"root\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\tid: CHILD_ID,\n\t\t\t\t\t\t\t\tparentId: ROOT_ID,\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"child\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\tid: SIBLING_ID,\n\t\t\t\t\t\t\t\tparentId: ROOT_ID,\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"sibling\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsetValue(branchTip(\"main\"), CHILD_ID),\n\t\t\t\t\t\t\tsetValue(laneConfig(\"main\"), configuration),\n\t\t\t\t\t\t\tsetValue(laneState(\"main\"), idleLaneState),\n\t\t\t\t\t\t\tsetValue(branchTip(\"review\"), SIBLING_ID),\n\t\t\t\t\t\t\tsetValue(laneConfig(\"review\"), configuration),\n\t\t\t\t\t\t\tsetValue(laneState(\"review\"), idleLaneState),\n\t\t\t\t\t\t\tsetValue(branchTip(\"notes\"), ROOT_ID),\n\t\t\t\t\t\t\tsetValue(applicationValue, { copied: true }),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tconst fork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await fork.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t[ROOT_ID, CHILD_ID, SIBLING_ID],\n\t\t\t);\n\t\t\tstrictEqual(await getBranchTip(fork), CHILD_ID);\n\t\t\tstrictEqual(await getBranchTip(fork, \"review\"), SIBLING_ID);\n\t\t\tstrictEqual(await getBranchTip(fork, \"notes\"), ROOT_ID);\n\t\t\tstrictEqual(await fork.getValue(laneConfig(\"notes\"), BACKGROUND_CONTEXT), undefined);\n\t\t\tstrictEqual(await fork.getValue(laneState(\"notes\"), BACKGROUND_CONTEXT), undefined);\n\t\t\tdeepStrictEqual((await fork.getValue(laneConfig(\"review\"), BACKGROUND_CONTEXT))?.value, configuration);\n\t\t\tdeepStrictEqual((await fork.getValue(laneState(\"review\"), BACKGROUND_CONTEXT))?.value, idleLaneState);\n\t\t\tdeepStrictEqual((await fork.getValue(applicationValue, BACKGROUND_CONTEXT))?.value, { copied: true });\n\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork.close(BACKGROUND_CONTEXT)]);\n\t\t}),\n\t\tcreateCase(factory, \"forks\", \"rejects only surviving unknown reserved scalar state\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tawait source.createBranch(\"main\", null, BACKGROUND_CONTEXT);\n\t\t\tawait source.mutate(\n\t\t\t\t(mutator) =>\n\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t[setValue(laneConfig(\"main\"), configuration), setValue(laneState(\"main\"), idleLaneState)],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tfor (const namespace of [\"ion\", \"ion.unknown\"] as const) {\n\t\t\t\tconst address = value<JsonValue>(namespace);\n\t\t\t\tawait source.setValue(address, true, BACKGROUND_CONTEXT);\n\t\t\t\tawait rejects(repo.fork(source.metadata, { id: \"tree\", scope: \"tree\" }, BACKGROUND_CONTEXT));\n\t\t\t\tawait rejects(\n\t\t\t\t\trepo.fork(source.metadata, { id: \"branch\", scope: \"branch\", branch: \"main\" }, BACKGROUND_CONTEXT),\n\t\t\t\t);\n\t\t\t\tawait source.deleteValue(address, BACKGROUND_CONTEXT);\n\t\t\t}\n\t\t\tawait source.close(BACKGROUND_CONTEXT);\n\n\t\t\tconst tree = await repo.fork(source.metadata, { id: \"tree\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\t\t\tconst branch = await repo.fork(\n\t\t\t\tsource.metadata,\n\t\t\t\t{ id: \"branch\", scope: \"branch\", branch: \"main\" },\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tawait Promise.all([tree.close(BACKGROUND_CONTEXT), branch.close(BACKGROUND_CONTEXT)]);\n\t\t}),\n\t];\n}\n\n/** WP08 cases enabled for Memory and JSONL while SQLite's streaming fork implementation is pending. */\nexport function createSessionRepoStreamingForkConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\t// Merge into createSessionRepoForkConformance once SQLite supports these cases.\n\treturn [\n\t\t...createSessionRepoForkApplicationListConformance(backendFactory, onClose),\n\t\t...createSessionRepoBranchForkApplicationStateConformance(backendFactory, onClose),\n\t\t...createSessionRepoForkLaneValidationConformance(backendFactory, onClose),\n\t];\n}\n\nfunction createSessionRepoForkLaneValidationConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(factory, \"fork lane validation\", \"ignores malformed unrelated lanes\", async ({ repo }) => {\n\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\tlet tree: Session<TMetadata> | undefined;\n\t\t\tlet branch: Session<TMetadata> | undefined;\n\t\t\ttry {\n\t\t\t\tawait source.createBranch(\"main\", null, BACKGROUND_CONTEXT);\n\t\t\t\tawait source.mutate(\n\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tsetValue(laneConfig(\"main\"), configuration),\n\t\t\t\t\t\t\t\tsetValue(laneState(\"main\"), idleLaneState),\n\t\t\t\t\t\t\t\tsetValue(laneConfig(\"unrelated\"), configuration),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\ttree = await repo.fork(source.metadata, { id: \"tree\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\t\t\t\tbranch = await repo.fork(\n\t\t\t\t\tsource.metadata,\n\t\t\t\t\t{ id: \"branch\", scope: \"branch\", branch: \"main\" },\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tstrictEqual(await getBranchTip(branch), null);\n\t\t\t} finally {\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tsource.close(BACKGROUND_CONTEXT),\n\t\t\t\t\ttree?.close(BACKGROUND_CONTEXT),\n\t\t\t\t\tbranch?.close(BACKGROUND_CONTEXT),\n\t\t\t\t]);\n\t\t\t}\n\t\t}),\n\t];\n}\n\n/** Creates application-list fork cases. */\nfunction createSessionRepoForkApplicationListConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn ([\"open\", \"closed\"] as const).flatMap((sourceState) => [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t`fork application lists (${sourceState} source)`,\n\t\t\t\"tree fork copies lists at distinct addresses\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\t// Each list keeps its own contents: keys \"\" and \"other\" in one namespace must not merge.\n\t\t\t\t// A different namespace also stays separate; pi2.events is application-owned, not reserved.\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst events = list<string>(\"test.application.events\");\n\t\t\t\t\tconst sibling = list<string>(events.namespace, \"other\");\n\t\t\t\t\tconst otherNamespace = list<string>(\"pi2.events\");\n\t\t\t\t\tconst absent = list<string>(events.namespace, \"absent\");\n\t\t\t\t\tawait source.appendList(events, \"event\", BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.appendList(sibling, \"sibling\", BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.appendList(otherNamespace, \"other namespace\", BACKGROUND_CONTEXT);\n\n\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\tfork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t(await fork.readList(events, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t\t\t[\"event\"],\n\t\t\t\t\t);\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t(await fork.readList(sibling, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t\t\t[\"sibling\"],\n\t\t\t\t\t);\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t(await fork.readList(otherNamespace, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t\t\t[\"other namespace\"],\n\t\t\t\t\t);\n\t\t\t\t\tdeepStrictEqual(await fork.readList(absent, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\t} finally {\n\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t`fork application lists (${sourceState} source)`,\n\t\t\t\"tree fork copies only survivors after list deletion and reappend\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\t// Append old -> delete -> append new must copy only new, even when changes share a transaction.\n\t\t\t\t// A list deleted without a later append must remain empty in the fork.\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst events = list<string>(\"test.application.events\");\n\t\t\t\t\tconst deleted = list<string>(events.namespace, \"deleted\");\n\t\t\t\t\tawait source.appendList(events, \"old\", BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.appendList(deleted, \"removed\", BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.mutate(\n\t\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tdeleteList(events),\n\t\t\t\t\t\t\t\t\tappendList(events, \"temporary\"),\n\t\t\t\t\t\t\t\t\tdeleteList(events),\n\t\t\t\t\t\t\t\t\tappendList(events, \"first survivor\"),\n\t\t\t\t\t\t\t\t\tdeleteList(deleted),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\t\t\t\t\tawait source.appendList(events, \"second survivor\", BACKGROUND_CONTEXT);\n\n\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\tfork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t(await fork.readList(events, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t\t\t[\"first survivor\", \"second survivor\"],\n\t\t\t\t\t);\n\t\t\t\t\tdeepStrictEqual(await fork.readList(deleted, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\t} finally {\n\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t`fork application lists (${sourceState} source)`,\n\t\t\t\"tree fork preserves list element sequences including gaps\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\t// Other writes consume sequences too. List elements at seq 2 and 4 must stay at 2 and 4\n\t\t\t\t// in the fork, not be renumbered to 1 and 2.\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst events = list<string>(\"test.application.events\");\n\t\t\t\t\tconst committed = await source.mutate(\n\t\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tsetValue(sessionName, \"before\"),\n\t\t\t\t\t\t\t\t\tappendList(events, \"first\"),\n\t\t\t\t\t\t\t\t\tsetValue(sessionName, \"between\"),\n\t\t\t\t\t\t\t\t\tappendList(events, \"second\"),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\tfork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\t\t\tdeepStrictEqual(await fork.readList(events, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t\t{ seq: committed.seqs[1]!, value: \"first\" },\n\t\t\t\t\t\t{ seq: committed.seqs[3]!, value: \"second\" },\n\t\t\t\t\t]);\n\t\t\t\t} finally {\n\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\t...([\"asc\", \"desc\"] as const).map((order) =>\n\t\t\tcreateCase(\n\t\t\t\tfactory,\n\t\t\t\t`fork application lists (${sourceState} source)`,\n\t\t\t\t`tree fork continues ${order} pagination using source cursors`,\n\t\t\t\tasync ({ repo }) => {\n\t\t\t\t\t// A cursor from the source must resume at the same place in the fork. After reading\n\t\t\t\t\t// [first, second] ascending, continue with [third]; descending does the reverse.\n\t\t\t\t\t// Continuing after the final element must return an empty page, not repeat that element.\n\t\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst events = list<string>(\"test.application.events\");\n\t\t\t\t\t\tfor (const item of [\"first\", \"second\", \"third\"]) {\n\t\t\t\t\t\t\tawait source.appendList(events, item, BACKGROUND_CONTEXT);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst firstPage = await source.readList(events, { order, limit: 2 }, BACKGROUND_CONTEXT);\n\t\t\t\t\t\tstrictEqual(firstPage.length, 2);\n\t\t\t\t\t\tconst cursor = { seq: firstPage[1]!.seq };\n\t\t\t\t\t\tconst lastPage = await source.readList(events, { order, cursor, limit: 2 }, BACKGROUND_CONTEXT);\n\t\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t\tlastPage.map(({ value }) => value),\n\t\t\t\t\t\t\t[order === \"asc\" ? \"third\" : \"first\"],\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst endCursor = { seq: lastPage[0]!.seq };\n\n\t\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\t\tfork = await repo.fork(source.metadata, { id: \"fork\", scope: \"tree\" }, BACKGROUND_CONTEXT);\n\n\t\t\t\t\t\tdeepStrictEqual(await fork.readList(events, { order, limit: 2 }, BACKGROUND_CONTEXT), firstPage);\n\t\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t\tawait fork.readList(events, { order, cursor, limit: 2 }, BACKGROUND_CONTEXT),\n\t\t\t\t\t\t\tlastPage,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t\tawait fork.readList(events, { order, cursor: endCursor, limit: 2 }, BACKGROUND_CONTEXT),\n\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t]);\n}\n\n/** Creates branch application-state cases. */\nfunction createSessionRepoBranchForkApplicationStateConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn ([\"open\", \"closed\"] as const).flatMap((sourceState) => [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t`branch fork application state (${sourceState} source)`,\n\t\t\t\"excludes overwritten and unchanged application values\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\t// WP08 §1.1: set v1 -> fork point -> overwrite with v2. A branch fork copies neither\n\t\t\t\t// version: it cannot reconstruct v1 and must not copy v2. Even unchanged older values\n\t\t\t\t// are excluded, so filtering current values by the fork point's sequence is not enough.\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst state = value<string>(\"test.application.state\");\n\t\t\t\t\tconst unchanged = value<string>(\"test.application.settings\");\n\t\t\t\t\tconst branch = await source.createBranch(\"review\", null, BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.mutate(\n\t\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tsetValue(laneConfig(\"review\"), configuration),\n\t\t\t\t\t\t\t\t\tsetValue(laneState(\"review\"), idleLaneState),\n\t\t\t\t\t\t\t\t\tsetValue(state, \"v1\"),\n\t\t\t\t\t\t\t\t\tsetValue(unchanged, \"predates fork point\"),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\t\t\t\t\tconst entryId = await branch.appendCustomEntry(\"fork-point\", undefined, BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.setValue(state, \"v2\", BACKGROUND_CONTEXT);\n\t\t\t\t\tstrictEqual((await source.getValue(state, BACKGROUND_CONTEXT))?.value, \"v2\");\n\n\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\tfork = await repo.fork(\n\t\t\t\t\t\tsource.metadata,\n\t\t\t\t\t\t{ scope: \"branch\", branch: \"review\", entryId },\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\n\t\t\t\t\tstrictEqual(await getBranchTip(fork, \"review\"), entryId);\n\t\t\t\t\tstrictEqual(await fork.getValue(state, BACKGROUND_CONTEXT), undefined);\n\t\t\t\t\t// A survivor older than the fork point must also be excluded, not copied by a seq cutoff.\n\t\t\t\t\tstrictEqual(await fork.getValue(unchanged, BACKGROUND_CONTEXT), undefined);\n\t\t\t\t} finally {\n\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t`branch fork application state (${sourceState} source)`,\n\t\t\t\"excludes deleted/reappended and untouched application lists\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\t// WP08 §1.1: append old -> fork point -> delete -> append new. A branch fork copies\n\t\t\t\t// neither the deleted elements nor the new ones. A separate untouched list is also\n\t\t\t\t// excluded, even though its elements still survive from before the fork point.\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tlet fork: Session<TMetadata> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst events = list<string>(\"test.application.events\");\n\t\t\t\t\tconst untouched = list<string>(events.namespace, \"untouched\");\n\t\t\t\t\tconst branch = await source.createBranch(\"review\", null, BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.mutate(\n\t\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tsetValue(laneConfig(\"review\"), configuration),\n\t\t\t\t\t\t\t\t\tsetValue(laneState(\"review\"), idleLaneState),\n\t\t\t\t\t\t\t\t\tappendList(events, \"old first\"),\n\t\t\t\t\t\t\t\t\tappendList(events, \"old second\"),\n\t\t\t\t\t\t\t\t\tappendList(untouched, \"predates fork point\"),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\t\t\t\t\tconst entryId = await branch.appendCustomEntry(\"fork-point\", undefined, BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.deleteList(events, BACKGROUND_CONTEXT);\n\t\t\t\t\tawait source.appendList(events, \"new\", BACKGROUND_CONTEXT);\n\t\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t\t(await source.readList(events, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t\t\t[\"new\"],\n\t\t\t\t\t);\n\n\t\t\t\t\tif (sourceState === \"closed\") await source.close(BACKGROUND_CONTEXT);\n\t\t\t\t\tfork = await repo.fork(\n\t\t\t\t\t\tsource.metadata,\n\t\t\t\t\t\t{ scope: \"branch\", branch: \"review\", entryId },\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t);\n\n\t\t\t\t\tstrictEqual(await getBranchTip(fork, \"review\"), entryId);\n\t\t\t\t\tdeepStrictEqual(await fork.readList(events, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\t\t// Even elements still surviving from before the fork point are excluded.\n\t\t\t\t\tdeepStrictEqual(await fork.readList(untouched, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t\t} finally {\n\t\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), fork?.close(BACKGROUND_CONTEXT)]);\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t]);\n}\n\n/** Creates fork cases that require destination reservation across create and fork. */\nexport function createSessionRepoForkDestinationReservationConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"fork coordination\",\n\t\t\t\"publishes create when it reserves a shared destination id first\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst results = await Promise.allSettled([\n\t\t\t\t\trepo.create({ id: \"destination\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\trepo.fork(source.metadata, { id: \"destination\", scope: \"tree\" }, BACKGROUND_CONTEXT),\n\t\t\t\t]);\n\t\t\t\tstrictEqual(results[0].status, \"fulfilled\");\n\t\t\t\tstrictEqual(results[1].status, \"rejected\");\n\t\t\t\tif (results[0].status === \"fulfilled\") await results[0].value.close(BACKGROUND_CONTEXT);\n\t\t\t\tawait source.close(BACKGROUND_CONTEXT);\n\t\t\t},\n\t\t),\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"fork coordination\",\n\t\t\t\"publishes fork when it reserves a shared destination id first\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst results = await Promise.allSettled([\n\t\t\t\t\trepo.fork(source.metadata, { id: \"destination\", scope: \"tree\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\trepo.create({ id: \"destination\" }, BACKGROUND_CONTEXT),\n\t\t\t\t]);\n\t\t\t\tstrictEqual(results[0].status, \"fulfilled\");\n\t\t\t\tstrictEqual(results[1].status, \"rejected\");\n\t\t\t\tif (results[0].status === \"fulfilled\") await results[0].value.close(BACKGROUND_CONTEXT);\n\t\t\t\tawait source.close(BACKGROUND_CONTEXT);\n\t\t\t},\n\t\t),\n\t];\n}\n\n/** Creates fork cases that require a snapshot boundary on an active source storage queue. */\nexport function createSessionRepoForkSourceSnapshotConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\tconst factory = prepareRepoCaseFactory(backendFactory, onClose);\n\treturn [\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"fork coordination\",\n\t\t\t\"captures one coherent boundary between source commits\",\n\t\t\tasync ({ repo }) => {\n\t\t\t\tconst source = await repo.create({ id: \"source\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst firstMutation = await source.beginMutation(BACKGROUND_CONTEXT);\n\t\t\t\tconst firstCommit = firstMutation.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\tid: ROOT_ID,\n\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\tcustomType: \"first\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsetValue(branchTip(\"main\"), ROOT_ID),\n\t\t\t\t\t\tsetValue(laneConfig(\"main\"), configuration),\n\t\t\t\t\t\tsetValue(laneState(\"main\"), idleLaneState),\n\t\t\t\t\t\tsetValue(sessionName, \"first name\"),\n\t\t\t\t\t\tsetValue(entryLabel(ROOT_ID), \"first label\"),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst fork = repo.fork(\n\t\t\t\t\tsource.metadata,\n\t\t\t\t\t{ id: \"fork\", scope: \"branch\", branch: \"main\" },\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst secondCommit = source.mutate(\n\t\t\t\t\t(mutator) =>\n\t\t\t\t\t\tmutator.commit(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tinsertEntry({\n\t\t\t\t\t\t\t\t\tid: CHILD_ID,\n\t\t\t\t\t\t\t\t\tparentId: ROOT_ID,\n\t\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\t\tcustomType: \"second\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsetValue(branchTip(\"main\"), CHILD_ID),\n\t\t\t\t\t\t\t\tsetValue(sessionName, \"second name\"),\n\t\t\t\t\t\t\t\tsetValue(entryLabel(ROOT_ID), \"second label\"),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tconst [, forked] = await Promise.all([firstCommit, fork]);\n\t\t\t\tawait firstMutation.end(BACKGROUND_CONTEXT);\n\t\t\t\tawait secondCommit;\n\t\t\t\tstrictEqual(await getBranchTip(forked), ROOT_ID);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await forked.findEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)).map(({ id }) => id),\n\t\t\t\t\t[ROOT_ID],\n\t\t\t\t);\n\t\t\t\tstrictEqual(await forked.getName(BACKGROUND_CONTEXT), \"first name\");\n\t\t\t\tstrictEqual(await forked.getLabel(ROOT_ID, BACKGROUND_CONTEXT), \"first label\");\n\t\t\t\tawait Promise.all([source.close(BACKGROUND_CONTEXT), forked.close(BACKGROUND_CONTEXT)]);\n\t\t\t},\n\t\t),\n\t];\n}\n\n/** Creates every fork coordination case. */\nexport function createSessionRepoForkCoordinationConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\treturn [\n\t\t...createSessionRepoForkDestinationReservationConformance(backendFactory, onClose),\n\t\t...createSessionRepoForkSourceSnapshotConformance(backendFactory, onClose),\n\t];\n}\n\n/** Creates every fork conformance case. */\nexport function createSessionRepoForkConformance<TMetadata extends SessionMetadata>(\n\tbackendFactory: () => Promise<Pick<SessionRepo<TMetadata>, \"create\" | \"list\" | \"fork\">>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\treturn [\n\t\t...createSessionRepoForkBehaviorConformance(backendFactory, onClose),\n\t\t...createSessionRepoForkCoordinationConformance(backendFactory, onClose),\n\t];\n}\n\n/** Creates every SessionRepo conformance case. */\nexport function createSessionRepoConformance<TMetadata extends SessionMetadata>(\n\tfactory: () => Promise<SessionRepo<TMetadata>>,\n\tonClose?: () => void | Promise<void>,\n): readonly ConformanceCase[] {\n\treturn [\n\t\t...createSessionRepoLifecycleConformance(factory, onClose),\n\t\t...createSessionRepoOwnershipConformance(factory, onClose),\n\t\t...createSessionRepoMessageConformance(factory, onClose),\n\t\t...createSessionRepoForkConformance(factory, onClose),\n\t];\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ConformanceCase, StorageFixture } from "../types.ts";
|
|
2
|
+
/** Creates fresh, runner-independent cases for the durable Storage contract. */
|
|
3
|
+
export declare function createStorageConformance(factory: () => Promise<StorageFixture>): readonly ConformanceCase[];
|
|
4
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../src/harness/session/testing/conformance/storage.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyGnE,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,eAAe,EAAE,CAkxB3G","sourcesContent":["import { deepStrictEqual, ok, rejects, strictEqual } from \"node:assert/strict\";\nimport type { Usage } from \"@m4ike1/ion-ai\";\nimport { BACKGROUND_CONTEXT } from \"../../../context.ts\";\nimport { insertEntry, insertUsage } from \"../../commit.ts\";\nimport type {\n\tCommitResult,\n\tCompactionEntry,\n\tCustomEntry,\n\tEntry,\n\tEntryStructure,\n\tJsonValue,\n\tMessageEntry,\n\tNewEntry,\n\tStorage,\n\tWrite,\n} from \"../../types.ts\";\nimport {\n\tappendList,\n\tbranchTip,\n\tdeleteList,\n\tdeleteValue,\n\tentryLabel,\n\tlist,\n\tpendingEntry,\n\tsetValue,\n\tvalue,\n} from \"../../values.ts\";\nimport type { ConformanceCase, StorageFixture } from \"../types.ts\";\n\nconst MESSAGE_TIMESTAMP = 1_650_000_000_000;\nconst testName = value<string>(\"test.session.name\");\nconst testValue = (key: string) => value<JsonValue>(\"test.value\", key);\nconst testValuePrefix = (prefix = \"\") => value<JsonValue>(\"test.value\", prefix);\nconst testList = (key: string) => list<JsonValue>(\"test.list\", key);\n\ntype ConformanceTest = (fixture: StorageFixture) => Promise<void>;\n\nfunction createCase(\n\tfactory: () => Promise<StorageFixture>,\n\tgroup: string,\n\tname: string,\n\ttest: ConformanceTest,\n): ConformanceCase {\n\treturn {\n\t\tgroup,\n\t\tname,\n\t\tasync run() {\n\t\t\tawait using fixture = await factory();\n\t\t\tawait test(fixture);\n\t\t},\n\t};\n}\n\nfunction usage(input: number, output: number, options: { cacheWrite1h?: number; reasoning?: number } = {}): Usage {\n\treturn {\n\t\tinput,\n\t\toutput,\n\t\tcacheRead: input + 1,\n\t\tcacheWrite: output + 1,\n\t\t...(options.cacheWrite1h === undefined ? {} : { cacheWrite1h: options.cacheWrite1h }),\n\t\t...(options.reasoning === undefined ? {} : { reasoning: options.reasoning }),\n\t\ttotalTokens: input + output,\n\t\tcost: {\n\t\t\tinput: input / 100,\n\t\t\toutput: output / 100,\n\t\t\tcacheRead: (input + 1) / 100,\n\t\t\tcacheWrite: (output + 1) / 100,\n\t\t\ttotal: (input + output + 2) / 100,\n\t\t},\n\t};\n}\n\nfunction zeroUsage(): Usage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t};\n}\n\nfunction userEntry(id: string, parentId: string | null = null, text = id): NewEntry<MessageEntry> {\n\treturn {\n\t\tid,\n\t\tparentId,\n\t\ttype: \"message\",\n\t\tmessage: {\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\ttimestamp: MESSAGE_TIMESTAMP,\n\t\t},\n\t};\n}\n\nfunction customEntry(\n\tid: string,\n\tparentId: string | null,\n\tcustomType = \"note\",\n\tdata: CustomEntry[\"data\"] = { id },\n): NewEntry<CustomEntry> {\n\treturn { id, parentId, type: \"custom\", customType, data };\n}\n\nfunction compactionEntry(id: string, parentId: string | null): NewEntry<CompactionEntry> {\n\treturn {\n\t\tid,\n\t\tparentId,\n\t\ttype: \"compaction\",\n\t\tsummary: `summary:${id}`,\n\t\tretainedTail: [],\n\t\ttokensBefore: 10,\n\t\tfromHook: false,\n\t};\n}\n\n// EntryStructure is included for scanBranchStructure conformance, especially SQLite's payload-free branch scans.\nfunction ids(entries: readonly (Entry | EntryStructure)[]): string[] {\n\treturn entries.map((entry) => entry.id);\n}\n\nfunction assertStrictlyIncreasing(values: readonly number[]): void {\n\tfor (let index = 1; index < values.length; index++) {\n\t\tok(values[index - 1] < values[index], `Expected ${values.join(\", \")} to be strictly increasing`);\n\t}\n}\n\nasync function assertCommitStats(storage: Storage, result: CommitResult): Promise<void> {\n\tdeepStrictEqual(result.stats, await storage.getStats(BACKGROUND_CONTEXT));\n}\n\n/** Creates fresh, runner-independent cases for the durable Storage contract. */\nexport function createStorageConformance(factory: () => Promise<StorageFixture>): readonly ConformanceCase[] {\n\treturn [\n\t\tcreateCase(factory, \"transactions\", \"commits mixed writes atomically in write order\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry(userEntry(\"entry\")),\n\t\t\t\t\tsetValue(testName, \"session\"),\n\t\t\t\t\tinsertUsage({ id: \"usage\", usage: usage(2, 3), adjustment: false, entryId: \"entry\" }),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tstrictEqual(result.seqs.length, 3);\n\t\t\tstrictEqual(result.firstSeq, result.seqs[0]);\n\t\t\tawait assertCommitStats(storage, result);\n\t\t\tassertStrictlyIncreasing(result.seqs);\n\t\t\tok(Number.isSafeInteger(result.timestamp) && result.timestamp >= 0);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([\"entry\"], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([[\"entry\", { ...userEntry(\"entry\"), seq: result.seqs[0], timestamp: result.timestamp }]]),\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {\n\t\t\t\taddress: testName,\n\t\t\t\tvalue: \"session\",\n\t\t\t\tseq: result.seqs[1],\n\t\t\t});\n\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ id: \"usage\", seq: result.seqs[2], usage: usage(2, 3), adjustment: false, entryId: \"entry\" },\n\t\t\t]);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"rolls back every store when a mixed transaction fails\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertEntry(userEntry(\"root\")), insertUsage({ id: \"taken\", usage: usage(1, 1), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst entriesBefore = await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst usageBefore = await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst statsBefore = await storage.getStats(BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tsetValue(testName, \"transient\"),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"transient-entry\", \"root\")),\n\t\t\t\t\t\t\tinsertUsage({ id: \"transient-usage\", usage: usage(5, 8), adjustment: true }),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"taken\", \"root\")),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), entriesBefore);\n\t\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), usageBefore);\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);\n\t\t\t\tstrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"preserves overwritten and deleted values when a transaction fails\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(testValue(\"overwritten\"), \"original\"),\n\t\t\t\t\t\tsetValue(testValue(\"deleted\"), { kept: true }),\n\t\t\t\t\t\tinsertEntry(userEntry(\"taken\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst overwrittenBefore = await storage.getValue(testValue(\"overwritten\"), BACKGROUND_CONTEXT);\n\t\t\t\tconst deletedBefore = await storage.getValue(testValue(\"deleted\"), BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tsetValue(testValue(\"overwritten\"), \"transient\"),\n\t\t\t\t\t\t\tdeleteValue(testValue(\"deleted\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"transient\", \"taken\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"taken\", null)),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"overwritten\"), BACKGROUND_CONTEXT), overwrittenBefore);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"deleted\"), BACKGROUND_CONTEXT), deletedBefore);\n\t\t\t\tstrictEqual((await storage.getEntries([\"transient\"], BACKGROUND_CONTEXT)).has(\"transient\"), false);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"transactions\", \"enforces one shared entry and usage id namespace\", async ({ storage }) => {\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry(userEntry(\"existing-entry\")),\n\t\t\t\t\tinsertUsage({ id: \"existing-usage\", usage: usage(1, 1), adjustment: false }),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tawait rejects(\n\t\t\t\tstorage.commit(\n\t\t\t\t\t[insertUsage({ id: \"existing-entry\", usage: usage(2, 2), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait rejects(storage.commit([insertEntry(customEntry(\"existing-usage\", null))], BACKGROUND_CONTEXT));\n\n\t\t\tfor (const [id, writes] of [\n\t\t\t\t[\n\t\t\t\t\t\"entry-then-usage\",\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(customEntry(\"entry-then-usage\", null)),\n\t\t\t\t\t\tinsertUsage({ id: \"entry-then-usage\", usage: usage(3, 3), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\"usage-then-entry\",\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertUsage({ id: \"usage-then-entry\", usage: usage(4, 4), adjustment: false }),\n\t\t\t\t\t\tinsertEntry(customEntry(\"usage-then-entry\", null)),\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t] satisfies Array<[string, Write[]]>) {\n\t\t\t\tawait rejects(storage.commit(writes, BACKGROUND_CONTEXT), `Expected duplicate id ${id} to reject`);\n\t\t\t}\n\n\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)), [\"existing-entry\"]);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t[\"existing-usage\"],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"resolves parents only from prior entries and earlier writes\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit([insertEntry(userEntry(\"root\"))], BACKGROUND_CONTEXT);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertEntry(customEntry(\"child\", \"root\")), insertEntry(customEntry(\"grandchild\", \"child\"))],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(await storage.scanBranch({ start: \"grandchild\", order: \"oldestFirst\" }, BACKGROUND_CONTEXT)),\n\t\t\t\t\t[\"root\", \"child\", \"grandchild\"],\n\t\t\t\t);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"before-parent\", \"later-parent\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"later-parent\", \"root\")),\n\t\t\t\t\t\t\tsetValue(entryLabel(\"before-parent\"), \"transient\"),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tawait rejects(storage.commit([insertEntry(customEntry(\"orphan\", \"missing\"))], BACKGROUND_CONTEXT));\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertUsage({ id: \"usage-is-not-parent\", usage: usage(1, 1), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit([insertEntry(customEntry(\"usage-child\", \"usage-is-not-parent\"))], BACKGROUND_CONTEXT),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tawait storage.getEntries([\"before-parent\", \"later-parent\", \"orphan\", \"usage-child\"], BACKGROUND_CONTEXT),\n\t\t\t\t\tnew Map(),\n\t\t\t\t);\n\t\t\t\tstrictEqual(await storage.getValue(entryLabel(\"before-parent\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"transactions\", \"places pending content under its reserved entry id\", async ({ storage }) => {\n\t\t\tconst entry = userEntry(\"reserved\", null, \"queued\");\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\tsetValue(pendingEntry(entry.id), { type: \"message\", payload: entry.message }),\n\t\t\t\t\tsetValue(branchTip(\"main\"), null),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tstrictEqual((await storage.getEntries([entry.id], BACKGROUND_CONTEXT)).has(entry.id), false);\n\t\t\tdeepStrictEqual((await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT))?.value, {\n\t\t\t\ttype: \"message\",\n\t\t\t\tpayload: entry.message,\n\t\t\t});\n\t\t\tstrictEqual((await storage.getValue(branchTip(\"main\"), BACKGROUND_CONTEXT))?.value, null);\n\n\t\t\tconst placement = await storage.commit(\n\t\t\t\t[insertEntry(entry), deleteValue(pendingEntry(entry.id)), setValue(branchTip(\"main\"), entry.id)],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([entry.id], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([[entry.id, { ...entry, seq: placement.seqs[0], timestamp: placement.timestamp }]]),\n\t\t\t);\n\t\t\tstrictEqual(await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT), undefined);\n\t\t\tdeepStrictEqual(await storage.getValue(branchTip(\"main\"), BACKGROUND_CONTEXT), {\n\t\t\t\taddress: branchTip(\"main\"),\n\t\t\t\tvalue: entry.id,\n\t\t\t\tseq: placement.seqs[2],\n\t\t\t});\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"sets, replaces, deletes, and recreates values without tombstones\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst first = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(testValue(\"prefix/b\"), 1),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), 2),\n\t\t\t\t\t\tsetValue(testValue(\"other\"), 3),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/\\ue000\"), 4),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/\\u{10000}\"), 5),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), null),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"prefix/a\"), BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: testValue(\"prefix/a\"),\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tseq: first.seqs[5],\n\t\t\t\t});\n\n\t\t\t\tconst second = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tdeleteValue(testValue(\"prefix/a\")),\n\t\t\t\t\t\tdeleteValue(testValue(\"absent\")),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), \"recreated\"),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanValues(testValuePrefix(\"prefix/\"), BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ address: testValue(\"prefix/a\"), value: \"recreated\", seq: second.seqs[2] },\n\t\t\t\t\t{ address: testValue(\"prefix/b\"), value: 1, seq: first.seqs[0] },\n\t\t\t\t\t{ address: testValue(\"prefix/\\ue000\"), value: 4, seq: first.seqs[3] },\n\t\t\t\t\t{ address: testValue(\"prefix/\\u{10000}\"), value: 5, seq: first.seqs[4] },\n\t\t\t\t]);\n\t\t\t\tstrictEqual(await storage.getValue(testValue(\"absent\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"applies same-transaction value and list operations in write order\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst keptValue = testValue(\"write-order/kept\");\n\t\t\t\tconst deletedValue = testValue(\"write-order/deleted\");\n\t\t\t\tconst keptList = testList(\"write-order/kept\");\n\t\t\t\tconst deletedList = testList(\"write-order/deleted\");\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(deletedValue, \"transient\"),\n\t\t\t\t\t\tdeleteValue(deletedValue),\n\t\t\t\t\t\tsetValue(keptValue, \"transient\"),\n\t\t\t\t\t\tsetValue(keptValue, \"kept\"),\n\t\t\t\t\t\tappendList(keptList, \"transient\"),\n\t\t\t\t\t\tdeleteList(keptList),\n\t\t\t\t\t\tappendList(keptList, \"kept\"),\n\t\t\t\t\t\tappendList(deletedList, \"transient\"),\n\t\t\t\t\t\tdeleteList(deletedList),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tstrictEqual(await storage.getValue(deletedValue, BACKGROUND_CONTEXT), undefined);\n\t\t\t\tdeepStrictEqual(await storage.getValue(keptValue, BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: keptValue,\n\t\t\t\t\tvalue: \"kept\",\n\t\t\t\t\tseq: result.seqs[3],\n\t\t\t\t});\n\t\t\t\tdeepStrictEqual(await storage.readList(keptList, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: result.seqs[6], value: \"kept\" },\n\t\t\t\t]);\n\t\t\t\tdeepStrictEqual(await storage.readList(deletedList, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"does not change historical stores during value-only commits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertUsage({ id: \"historical-usage\", usage: usage(2, 3), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst entriesBefore = await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst usageBefore = await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst statsBefore = await storage.getStats(BACKGROUND_CONTEXT);\n\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[setValue(testName, \"first\"), setValue(testName, \"second\")],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), entriesBefore);\n\t\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), usageBefore);\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: testName,\n\t\t\t\t\tvalue: \"second\",\n\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t});\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"lists\", \"pages appends by global sequence and deletes whole lists\", async ({ storage }) => {\n\t\t\tconst address = testList(\"events\");\n\t\t\tstrictEqual((await storage.readList(address, undefined, BACKGROUND_CONTEXT)).length, 0);\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[appendList(address, \"a\"), setValue(testName, \"gap\"), appendList(address, \"b\"), appendList(address, \"c\")],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(await storage.readList(address, { limit: 2 }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.readList(address, { cursor: { seq: result.seqs[0]! }, limit: 2 }, BACKGROUND_CONTEXT),\n\t\t\t\t[\n\t\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t\t],\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.readList(address, { order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.readList(\n\t\t\t\t\taddress,\n\t\t\t\t\t{ order: \"desc\", cursor: { seq: result.seqs[3]! }, limit: 2 },\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait rejects(storage.readList(address, { limit: 0 }, BACKGROUND_CONTEXT));\n\t\t\tawait rejects(storage.readList(address, { limit: Number.MAX_VALUE }, BACKGROUND_CONTEXT));\n\n\t\t\tawait storage.commit(\n\t\t\t\t[deleteList(address), deleteList(testList(\"absent\")), appendList(address, \"new\")],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await storage.readList(address, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t[\"new\"],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(factory, \"lists\", \"clamps one read page without limiting list growth\", async ({ storage }) => {\n\t\t\tconst address = testList(\"large\");\n\t\t\tawait storage.commit(\n\t\t\t\tArray.from({ length: 10_001 }, (_, index) => appendList(address, index)),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tconst firstPage = await storage.readList(address, undefined, BACKGROUND_CONTEXT);\n\t\t\tstrictEqual(firstPage.length, 1_000);\n\t\t\tstrictEqual((await storage.readList(address, { limit: 20_000 }, BACKGROUND_CONTEXT)).length, 10_000);\n\t\t\tstrictEqual(\n\t\t\t\t(\n\t\t\t\t\tawait storage.readList(\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcursor: { seq: firstPage.at(-1)!.seq },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t)\n\t\t\t\t).length,\n\t\t\t\t1_000,\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lists\",\n\t\t\t\"commits mixed list writes atomically and rolls them back with siblings\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst address = testList(\"atomic\");\n\t\t\t\tconst committed = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"mixed\")),\n\t\t\t\t\t\tappendList(address, \"kept\"),\n\t\t\t\t\t\tsetValue(testName, \"kept\"),\n\t\t\t\t\t\tinsertUsage({ id: \"mixed-usage\", usage: usage(1, 2), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: committed.seqs[1], value: \"kept\" },\n\t\t\t\t]);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[appendList(address, \"transient\"), deleteValue(testName), insertEntry(userEntry(\"mixed\"))],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: committed.seqs[1], value: \"kept\" },\n\t\t\t\t]);\n\t\t\t\tstrictEqual((await storage.getValue(testName, BACKGROUND_CONTEXT))?.value, \"kept\");\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"entry queries\", \"stores custom entries with and without data\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry({ id: \"without-data\", parentId: null, type: \"custom\", customType: \"marker\" }),\n\t\t\t\t\tinsertEntry(customEntry(\"with-data\", \"without-data\", \"note\", { nested: [1, 2] })),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([\"without-data\", \"with-data\"], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"without-data\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"without-data\",\n\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\tcustomType: \"marker\",\n\t\t\t\t\t\t\tseq: result.seqs[0],\n\t\t\t\t\t\t\ttimestamp: result.timestamp,\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\t\"with-data\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...customEntry(\"with-data\", \"without-data\", \"note\", { nested: [1, 2] }),\n\t\t\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t]),\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"entry queries\",\n\t\t\t\"scans global entries with explicit ranges, filters, orders, and limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note-1\", \"root\", \"note\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"other\", \"note-1\", \"other\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note-2\", \"other\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"tail\", \"note-2\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanEntries(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"note\",\n\t\t\t\t\t\t\t\tfromSeq: result.seqs[1],\n\t\t\t\t\t\t\t\ttoSeq: result.seqs[3],\n\t\t\t\t\t\t\t\torder: \"desc\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"note-2\", \"note-1\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\", limit: 2 }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"root\",\n\t\t\t\t\t\"note-1\",\n\t\t\t\t]);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"tail\",\n\t\t\t\t\t\"note-2\",\n\t\t\t\t]);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"branch queries\",\n\t\t\t\"applies stops before filters and cursors before limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"marker\", \"root\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"middle\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compact\", \"middle\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note\", \"compact\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"leaf\", \"note\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{ start: \"leaf\", stopAtType: \"compaction\", type: \"message\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"leaf\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"oldestFirst\",\n\t\t\t\t\t\t\t\tstopAtId: \"middle\",\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"marker\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"newestFirst\",\n\t\t\t\t\t\t\t\tcursor: { seq: result.seqs[4] },\n\t\t\t\t\t\t\t\tlimit: 2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"compact\", \"middle\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"oldestFirst\",\n\t\t\t\t\t\t\t\tcursor: { seq: result.seqs[1] },\n\t\t\t\t\t\t\t\tlimit: 2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"middle\", \"compact\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(await storage.scanBranch({ start: \"leaf\", stopAtId: \"leaf\", type: \"custom\" }, BACKGROUND_CONTEXT)),\n\t\t\t\t\t[],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanBranch({ start: \"leaf\", customType: \"note\" }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"note\",\n\t\t\t\t]);\n\t\t\t\tawait rejects(storage.scanBranch({ start: \"missing\" }, BACKGROUND_CONTEXT));\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"branch queries\", \"returns branch structure without payload fields\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[insertEntry(userEntry(\"root\")), insertEntry(customEntry(\"child\", \"root\", \"note\"))],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.scanBranchStructure({ start: \"child\", order: \"oldestFirst\" }, BACKGROUND_CONTEXT),\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"root\",\n\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\tseq: result.seqs[0],\n\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"child\",\n\t\t\t\t\t\tparentId: \"root\",\n\t\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\tcustomType: \"note\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"branch queries\",\n\t\t\t\"applies branch query semantics to structure scans\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"marker\", \"root\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"middle\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compact\", \"middle\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note\", \"compact\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"leaf\", \"note\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranchStructure(\n\t\t\t\t\t\t\t{ start: \"leaf\", stopAtType: \"compaction\", type: \"message\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"leaf\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranchStructure(\n\t\t\t\t\t\t\t{ start: \"leaf\", order: \"oldestFirst\", cursor: { seq: result.seqs[1] }, limit: 2 },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"middle\", \"compact\"],\n\t\t\t\t);\n\t\t\t\tawait rejects(storage.scanBranchStructure({ start: \"missing\" }, BACKGROUND_CONTEXT));\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"usage and stats\",\n\t\t\t\"scans the usage ledger with explicit ranges, orders, and limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertUsage({ id: \"usage-1\", usage: usage(1, 1), adjustment: false }),\n\t\t\t\t\t\tsetValue(testName, \"sequence gap\"),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-2\", usage: usage(2, 2), adjustment: false }),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-3\", usage: usage(3, 3), adjustment: true }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait storage.scanUsage(\n\t\t\t\t\t\t\t{ fromSeq: result.seqs[1], toSeq: result.seqs[2], order: \"asc\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t)\n\t\t\t\t\t).map((row) => row.id),\n\t\t\t\t\t[\"usage-2\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await storage.scanUsage({ order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t\t[\"usage-3\", \"usage-2\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await storage.scanUsage({ order: \"asc\", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t\t[\"usage-1\", \"usage-2\"],\n\t\t\t\t);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"usage and stats\",\n\t\t\t\"keeps stats equal to message count and ledger totals\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), { messageCount: 0, usage: zeroUsage() });\n\n\t\t\t\tconst firstUsage = usage(2, 3, { cacheWrite1h: 4, reasoning: 1 });\n\t\t\t\tconst first = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"message\")),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-1\", usage: firstUsage, adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait assertCommitStats(storage, first);\n\t\t\t\tdeepStrictEqual(first.stats, { messageCount: 1, usage: firstUsage });\n\n\t\t\t\tconst secondUsage = usage(5, 7, { cacheWrite1h: 6, reasoning: 2 });\n\t\t\t\tconst second = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(customEntry(\"custom\", \"message\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compaction\", \"custom\")),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-2\", usage: secondUsage, adjustment: true }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait assertCommitStats(storage, second);\n\t\t\t\tdeepStrictEqual(second.stats, {\n\t\t\t\t\tmessageCount: 1,\n\t\t\t\t\tusage: {\n\t\t\t\t\t\tinput: 7,\n\t\t\t\t\t\toutput: 10,\n\t\t\t\t\t\tcacheRead: 9,\n\t\t\t\t\t\tcacheWrite: 12,\n\t\t\t\t\t\tcacheWrite1h: 10,\n\t\t\t\t\t\treasoning: 3,\n\t\t\t\t\t\ttotalTokens: 17,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: firstUsage.cost.input + secondUsage.cost.input,\n\t\t\t\t\t\t\toutput: firstUsage.cost.output + secondUsage.cost.output,\n\t\t\t\t\t\t\tcacheRead: firstUsage.cost.cacheRead + secondUsage.cost.cacheRead,\n\t\t\t\t\t\t\tcacheWrite: firstUsage.cost.cacheWrite + secondUsage.cost.cacheWrite,\n\t\t\t\t\t\t\ttotal: firstUsage.cost.total + secondUsage.cost.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"serialization\",\n\t\t\t\"serializes back-to-back commits in admission order\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst first = storage.commit([insertEntry(userEntry(\"first\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst second = storage.commit([insertEntry(userEntry(\"second\", \"first\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst [firstResult, secondResult] = await Promise.all([first, second]);\n\n\t\t\t\tok(firstResult.seqs[0]! < secondResult.seqs[0]!);\n\t\t\t\tdeepStrictEqual(firstResult.stats, { messageCount: 1, usage: zeroUsage() });\n\t\t\t\tdeepStrictEqual(secondResult.stats, { messageCount: 2, usage: zeroUsage() });\n\t\t\t\tawait assertCommitStats(storage, secondResult);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)), [\"first\", \"second\"]);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lifecycle\",\n\t\t\t\"seals admission, drains admitted commits, and closes idempotently\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst admitted = storage.commit([insertEntry(userEntry(\"admitted\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst firstClose = storage.close(BACKGROUND_CONTEXT);\n\t\t\t\tconst secondClose = storage.close(BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(storage.getStats(BACKGROUND_CONTEXT));\n\t\t\t\tawait rejects(storage.commit([], BACKGROUND_CONTEXT));\n\t\t\t\tstrictEqual((await admitted).seqs.length, 1);\n\t\t\t\tawait Promise.all([firstClose, secondClose]);\n\n\t\t\t\tconst rejectedReads = [\n\t\t\t\t\tstorage.getEntries([], BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.getValue(testName, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanValues(testName, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.readList(testList(\"events\"), undefined, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanBranch({ start: \"admitted\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanBranchStructure({ start: \"admitted\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.getStats(BACKGROUND_CONTEXT),\n\t\t\t\t];\n\t\t\t\tfor (const read of rejectedReads) await rejects(read);\n\t\t\t},\n\t\t),\n\t];\n}\n"]}
|