@obversa/api 0.1.0 → 0.2.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/dist/contracts.d.ts +7 -0
- package/dist/index.js.map +1 -1
- package/dist/testing.js +14 -5
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine-conformance.ts","../src/memory-conformance.ts","../src/events/conformance.ts","../src/artifacts/conformance.ts","../src/workspace/conformance.ts"],"names":["failure","event","cases","selected","check","message","isDeepStrictEqual","failures","DEFAULT_OPTIONS","expectStorageError","randomUUID"],"mappings":"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","file":"testing.js","sourcesContent":["import { isDeepStrictEqual } from 'node:util';\n\nimport { EngineError, classifyEngineFailure, type EngineFailureKind } from './error.js';\nimport type {\n AgentRequest,\n AgentResult,\n AgentResultPart,\n Engine,\n EngineSelectionRecord,\n EngineStreamEvent,\n} from './contracts.js';\nimport type { JsonValue } from './json.js';\nimport { modelIdentity } from './model-identity.js';\nimport { engineSelection, validateAgentResult } from './result.js';\n\nexport type EngineConformanceScenario =\n | 'ordered-parts'\n | 'structured-result'\n | 'unknown-usage'\n | 'reported-usage'\n | 'tool-events'\n | 'late-final'\n | 'cancellation'\n | 'missing-cli'\n | 'auth'\n | 'billing'\n | 'model-unavailable'\n | 'rate-limit'\n | 'quota'\n | 'transient'\n | 'timeout'\n | 'invalid-config'\n | 'read-access'\n | 'workspace-none'\n | 'workspace-read'\n | 'workspace-write';\n\ntype WorkspaceMode = NonNullable<AgentRequest['workspaceMode']>;\ntype FeatureScenario = Exclude<EngineConformanceScenario, 'read-access' | `workspace-${WorkspaceMode}`>;\n\nexport interface EngineConformanceFixture {\n readonly request: AgentRequest;\n readonly requested: EngineSelectionRecord;\n readonly effective: EngineSelectionRecord;\n readonly unsupported?: Partial<Record<FeatureScenario, string>>;\n readonly workspace: {\n readonly modes: Record<WorkspaceMode, {\n readonly request: AgentRequest;\n readonly outcome: 'supported' | 'refused';\n readonly requested?: EngineSelectionRecord;\n readonly effective?: EngineSelectionRecord;\n }>;\n /** Observe actual process arguments or provider options, never the input request. */\n observe(): {\n readonly modelCalls: number;\n readonly canRead: boolean;\n readonly canWrite: boolean;\n } | Promise<{\n readonly modelCalls: number;\n readonly canRead: boolean;\n readonly canWrite: boolean;\n }>;\n };\n /** Parse a final assistant part when the backend has no native schema mode. */\n readonly parseStructuredResult?: (\n part: AgentResultPart,\n parts: readonly AgentResultPart[],\n ) => JsonValue;\n /**\n * True for an adapter whose provider and model family come from the model\n * it was given rather than from its own name (OpenCode, Devin). The kit then\n * checks that the identity it reports is the one `modelIdentity` reads from\n * the reported model, so two seats on one model cannot pass as two families.\n */\n readonly identityFromModel?: boolean;\n open(scenario: EngineConformanceScenario): Engine | Promise<Engine>;\n}\n\nexport interface EngineConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface EngineConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly EngineConformanceFailure[];\n}\n\nexport interface EngineAdapterConformanceReport extends EngineConformanceReport {\n readonly unsupported: readonly { readonly case: FeatureScenario; readonly reason: string }[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n readonly scenario?: EngineConformanceScenario;\n run(): Promise<void>;\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction check(condition: unknown, failure: string): asserts condition {\n if (!condition) throw new Error(failure);\n}\n\nfunction requestFor(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n): AgentRequest {\n return {\n ...fixture.request,\n ...(fixture.request.tools === undefined\n ? {}\n : { tools: [...fixture.request.tools] }),\n ...(fixture.request.allowedTools === undefined\n ? {}\n : { allowedTools: [...fixture.request.allowedTools] }),\n ...(fixture.request.attempt === undefined\n ? {}\n : {\n attempt: {\n ...fixture.request.attempt,\n path: [...fixture.request.attempt.path],\n },\n }),\n ...(fixture.request.env === undefined\n ? {}\n : { env: { ...fixture.request.env } }),\n ...(scenario === 'read-access'\n ? { tools: [], allowedTools: [], workspaceMode: 'read' as const }\n : {}),\n ...(scenario === 'structured-result'\n ? {\n jsonSchema: {\n type: 'object',\n properties: { answer: { type: 'number' } },\n required: ['answer'],\n additionalProperties: false,\n },\n }\n : {}),\n };\n}\n\nasync function openAndRun(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n): Promise<{ readonly result: AgentResult; readonly events: readonly EngineStreamEvent[] }> {\n const engine = await fixture.open(scenario);\n const events: EngineStreamEvent[] = [];\n const result = validateAgentResult(await engine.run(\n requestFor(fixture, scenario),\n (event) => events.push(event),\n new AbortController().signal,\n ));\n check(\n isDeepStrictEqual(result.requested, fixture.requested),\n 'Result changed the requested engine identity.',\n );\n check(\n isDeepStrictEqual(result.effective, fixture.effective),\n 'Result changed the effective engine identity.',\n );\n return { result, events: Object.freeze(events) };\n}\n\nfunction usageEvents(events: readonly EngineStreamEvent[]): EngineStreamEvent[] {\n return events.filter((event) => event.type === 'usage');\n}\n\nasync function expectFailure(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n expected: EngineFailureKind,\n): Promise<void> {\n let error: unknown;\n try {\n const engine = await fixture.open(scenario);\n await engine.run(\n requestFor(fixture, scenario),\n () => {},\n new AbortController().signal,\n );\n } catch (caught) {\n error = caught;\n }\n check(error !== undefined, `${scenario} completed instead of failing.`);\n const actual = classifyEngineFailure(error);\n check(\n actual === expected,\n `${scenario} classified as ${actual} instead of ${expected}.`,\n );\n}\n\nfunction withDeadline<Value>(\n promise: Promise<Value>,\n milliseconds: number,\n): Promise<Value> {\n return new Promise<Value>((resolve, reject) => {\n const timer = setTimeout(\n () => reject(new Error('Engine did not settle after cancellation.')),\n milliseconds,\n );\n timer.unref?.();\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\n/** Run framework-free behavioral checks against an outside Engine adapter. */\nexport async function runEngineConformance(\n fixture: EngineConformanceFixture,\n): Promise<EngineAdapterConformanceReport> {\n check(\n typeof fixture === 'object'\n && fixture !== null\n && typeof fixture.open === 'function',\n 'Engine conformance fixture must provide open().',\n );\n check(\n typeof fixture.request?.prompt === 'string'\n && fixture.request.prompt.length > 0,\n 'Engine conformance request must have a prompt.',\n );\n\n const cases: readonly ConformanceCase[] = [\n ...(fixture.identityFromModel === true\n ? [{\n name: 'identity follows the model it was given',\n scenario: 'ordered-parts' as const,\n async run() {\n const { result } = await openAndRun(fixture, 'ordered-parts');\n const reported = result.effective;\n check(typeof reported.model === 'string' && reported.model.length > 0,\n 'Engine reported no model to derive an identity from.');\n const derived = modelIdentity(reported.model);\n check(reported.modelFamily === derived.modelFamily,\n `Engine reported family ${String(reported.modelFamily)} for model ${reported.model}; the shared derivation reads ${derived.modelFamily}.`);\n check(derived.provider === undefined || reported.provider === derived.provider,\n `Engine reported provider ${String(reported.provider)} for model ${reported.model}; the shared derivation reads ${derived.provider}.`);\n },\n } satisfies ConformanceCase]\n : []),\n {\n name: 'ordered result parts',\n scenario: 'ordered-parts',\n async run() {\n const { result, events } = await openAndRun(fixture, 'ordered-parts');\n check(\n isDeepStrictEqual(result.parts, [\n { kind: 'assistant', text: 'draft', final: false },\n { kind: 'assistant', text: 'answer', final: true },\n ]),\n 'Engine did not preserve the two ordered assistant parts.',\n );\n check(\n events.filter((event) => event.type === 'text')\n .map((event) => event.delta)\n .join('|') === 'draft|answer',\n 'Engine did not stream ordered text observations.',\n );\n },\n },\n {\n name: 'structured result',\n scenario: 'structured-result',\n async run() {\n const { result } = await openAndRun(fixture, 'structured-result');\n const final = result.parts.find((part) => part.final);\n check(final !== undefined, 'Engine did not return a final result part.');\n const value = final.kind === 'structured'\n ? final.value\n : fixture.parseStructuredResult?.(final, result.parts);\n check(\n isDeepStrictEqual(value, { answer: 42 }),\n 'Engine did not return a usable structured value.',\n );\n },\n },\n {\n name: 'unknown usage remains unknown',\n scenario: 'unknown-usage',\n async run() {\n const { result, events } = await openAndRun(fixture, 'unknown-usage');\n check(result.usage.kind === 'unknown', 'Engine invented a usage receipt.');\n const streamed = usageEvents(events);\n check(\n streamed.length === 1\n && streamed[0]?.type === 'usage'\n && streamed[0].usage.kind === 'unknown',\n 'Engine did not emit exactly one unknown usage observation.',\n );\n },\n },\n {\n name: 'reported usage stays measured',\n scenario: 'reported-usage',\n async run() {\n const { result, events } = await openAndRun(fixture, 'reported-usage');\n check(\n isDeepStrictEqual(result.usage, {\n kind: 'reported',\n inputTokens: 5,\n outputTokens: 3,\n }),\n 'Engine changed the reported token receipt.',\n );\n const streamed = usageEvents(events);\n check(\n streamed.length === 1\n && streamed[0]?.type === 'usage'\n && isDeepStrictEqual(streamed[0].usage, result.usage),\n 'Engine did not emit exactly one matching usage observation.',\n );\n },\n },\n {\n name: 'tool observations stay ordered',\n scenario: 'tool-events',\n async run() {\n const { events } = await openAndRun(fixture, 'tool-events');\n const tools = events.filter((event) => event.type === 'tool');\n const expectedTool = fixture.request.tools?.[0];\n check(\n typeof expectedTool === 'string' && expectedTool.length > 0,\n 'Tool conformance requires one declared request tool.',\n );\n check(\n isDeepStrictEqual(tools, [\n { type: 'tool', name: expectedTool, phase: 'use' },\n { type: 'tool', name: expectedTool, phase: 'result' },\n ]),\n 'Engine lost or reordered visible tool observations.',\n );\n },\n },\n {\n name: 'late final survives transport failure',\n scenario: 'late-final',\n async run() {\n const { result } = await openAndRun(fixture, 'late-final');\n check(\n result.parts.some((part) => part.final),\n 'Late result lost its marked final part.',\n );\n check(\n result.transportFailure !== undefined,\n 'Late result hid the later transport failure.',\n );\n check(\n result.transportFailure.kind === 'unknown',\n 'Engine classified words in completed output as the transport failure.',\n );\n },\n },\n {\n name: 'in-flight cancellation',\n scenario: 'cancellation',\n async run() {\n const controller = new AbortController();\n const engine = await fixture.open('cancellation');\n let sawEvent = false;\n let error: unknown;\n try {\n await withDeadline(engine.run(\n requestFor(fixture, 'cancellation'),\n () => {\n sawEvent = true;\n controller.abort();\n },\n controller.signal,\n ), 3_000);\n } catch (caught) {\n error = caught;\n }\n check(sawEvent, 'Cancellation fixture never began streaming.');\n check(error !== undefined, 'Cancelled engine completed successfully.');\n check(\n classifyEngineFailure(error) === 'aborted',\n `Cancellation classified as ${classifyEngineFailure(error)} instead of aborted.`,\n );\n },\n },\n ...([\n ['missing-cli', 'missing-cli'],\n ['auth', 'auth'],\n ['billing', 'billing'],\n ['model-unavailable', 'model-unavailable'],\n ['rate-limit', 'rate-limit'],\n ['quota', 'quota'],\n ['transient', 'transient'],\n ['timeout', 'timeout'],\n ['invalid-config', 'invalid-config'],\n ] as const).map(([scenario, expected]) => ({\n name: `${scenario} failure classification`,\n scenario,\n run: () => expectFailure(fixture, scenario, expected),\n })),\n {\n name: 'read workspace requires declared tools',\n run: () => expectFailure(fixture, 'read-access', 'invalid-config'),\n },\n ...(['none', 'read', 'write'] as const).map((mode): ConformanceCase => ({\n name: `workspace ${mode}`,\n async run() {\n const probe = fixture.workspace?.modes[mode];\n check(probe !== undefined && typeof fixture.workspace.observe === 'function',\n `Workspace ${mode} requires a process/provider boundary fixture.`);\n check(probe.outcome === 'supported' || probe.outcome === 'refused', 'Invalid workspace outcome.');\n const engine = await fixture.open(`workspace-${mode}`);\n let result: AgentResult | undefined;\n let error: unknown;\n try {\n result = await engine.run({ ...probe.request, workspaceMode: mode }, () => {}, new AbortController().signal);\n } catch (caught) {\n error = caught;\n }\n const observed = await fixture.workspace.observe();\n check(Number.isSafeInteger(observed.modelCalls) && observed.modelCalls >= 0,\n 'Workspace fixture must count actual model calls.');\n if (probe.outcome === 'refused') {\n check(error instanceof EngineError && error.kind === 'invalid-config',\n 'Unsupported workspace mode must return a typed invalid-config failure.');\n check(observed.modelCalls === 0, 'Workspace refusal happened after a model call.');\n return;\n }\n if (error !== undefined) throw error;\n check(result !== undefined, 'Supported workspace mode returned no result.');\n check(observed.modelCalls > 0, 'Supported workspace fixture never reached the model boundary.');\n check(observed.canRead === (mode !== 'none'), `Workspace ${mode} exposed incorrect read access.`);\n check(observed.canWrite === (mode === 'write'), `Workspace ${mode} exposed incorrect write access.`);\n const valid = validateAgentResult(result);\n check(isDeepStrictEqual(valid.requested, probe.requested ?? fixture.requested),\n 'Workspace result changed the requested engine identity or capabilities.');\n check(isDeepStrictEqual(valid.effective, probe.effective ?? fixture.effective),\n 'Workspace result changed the effective engine identity or capabilities.');\n },\n })),\n ];\n\n const failures: EngineConformanceFailure[] = [];\n const unsupported: { case: FeatureScenario; reason: string }[] = [];\n for (const [scenario, reason] of Object.entries(fixture.unsupported ?? {})) {\n check(cases.some((item) => item.scenario === scenario), `Cannot skip mandatory or unknown scenario ${scenario}.`);\n check(typeof reason === 'string' && reason.trim().length > 0, `Unsupported scenario ${scenario} requires a reason.`);\n }\n for (const item of cases) {\n const reason = item.scenario === undefined ? undefined : fixture.unsupported?.[item.scenario as FeatureScenario];\n if (reason !== undefined) {\n unsupported.push({ case: item.scenario as FeatureScenario, reason });\n continue;\n }\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length - unsupported.length,\n failures: Object.freeze(failures.map((item) => Object.freeze(item))),\n unsupported: Object.freeze(unsupported.map((item) => Object.freeze(item))),\n });\n}\n\n/** Throw one readable error when an outside Engine breaks the contract. */\nexport async function assertEngineConformance(\n fixture: EngineConformanceFixture,\n): Promise<void> {\n const report = await runEngineConformance(fixture);\n if (report.ok) return;\n const detail = report.failures\n .map((item) => `${item.case}: ${item.message}`)\n .join('; ');\n throw new Error(`Engine conformance failed: ${detail}`);\n}\n\nexport interface EngineAdmissionConformanceFixture {\n readonly request: AgentRequest;\n readonly selection: EngineSelectionRecord;\n open(): Engine | Promise<Engine>;\n /** No argument counts all model calls; a path/null counts that target. */\n modelCalls(executable?: string | null): number | Promise<number>;\n readonly cli?: {\n /** Move bare-name lookup while keeping the admitted path runnable. */\n moveLookup(): void | Promise<void>;\n /** Same configuration, except an explicitly different absolute path. */\n openDifferent(): Engine | Promise<Engine>;\n /** A syntactically valid absolute path with no executable. */\n openMissing(): Engine | Promise<Engine>;\n };\n}\n\nexport type EngineAdmissionConformanceReport = EngineConformanceReport | {\n readonly kind: 'unsupported';\n readonly adapter: string;\n};\n\nclass AdmissionUnsupportedError extends Error {\n constructor(readonly adapter: string) {\n super(`${adapter} does not implement admit`);\n }\n}\n\n/** Check optional admission without imposing the full run-scenario protocol. */\nexport async function runEngineAdmissionConformance(\n fixture: EngineAdmissionConformanceFixture,\n): Promise<EngineAdmissionConformanceReport> {\n const failures: EngineConformanceFailure[] = [];\n let cases = 0;\n let unsupported: Extract<EngineAdmissionConformanceReport, { kind: 'unsupported' }>\n | undefined;\n\n const report = (): EngineAdmissionConformanceReport => unsupported ?? Object.freeze({\n ok: failures.length === 0,\n cases,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n const runCase = async <Value>(\n name: string,\n action: () => Promise<Value>,\n ): Promise<Value | undefined> => {\n if (unsupported) return;\n cases += 1;\n try {\n return await action();\n } catch (error) {\n if (error instanceof AdmissionUnsupportedError) {\n unsupported = Object.freeze({ kind: 'unsupported', adapter: error.adapter });\n } else {\n failures.push({ case: name, message: message(error) });\n }\n }\n };\n const method = (engine: Engine): NonNullable<Engine['admit']> => {\n if (typeof engine.admit !== 'function') throw new AdmissionUnsupportedError(engine.name);\n return engine.admit.bind(engine);\n };\n const request = (): Omit<AgentRequest, 'prompt'> => {\n const { prompt: _prompt, ...rest } = structuredClone(fixture.request);\n return rest;\n };\n const noModelCall = async <Value>(action: () => Promise<Value>): Promise<Value> => {\n const before = await fixture.modelCalls();\n try {\n return await action();\n } finally {\n check(await fixture.modelCalls() === before, 'Admission or refusal made a model call.');\n }\n };\n const expectFailureKind = async (\n action: () => Promise<unknown>,\n kind: EngineFailureKind,\n ): Promise<void> => {\n let error: unknown;\n try { await action(); } catch (caught) { error = caught; }\n if (error instanceof AdmissionUnsupportedError) throw error;\n check(error instanceof EngineError && error.kind === kind,\n `Expected a typed ${kind} failure, got ${error === undefined ? 'success' : message(error)}.`);\n };\n const signal = (): AbortSignal => new AbortController().signal;\n const runSelected = async (engine: Engine, selected: EngineSelectionRecord): Promise<void> => {\n const total = await fixture.modelCalls();\n const atPath = await fixture.modelCalls(selected.executable);\n const result = validateAgentResult(await engine.run(\n structuredClone(fixture.request), () => {}, signal(),\n ));\n check(isDeepStrictEqual(result.requested, selected), 'Run changed its admitted requested identity.');\n check(isDeepStrictEqual(result.effective, selected), 'Run changed its admitted effective identity.');\n check(await fixture.modelCalls() === total + 1, 'Run did not make exactly one fixture model call.');\n check(await fixture.modelCalls(selected.executable) === atPath + 1,\n 'Run used a different executable from its admitted selection.');\n };\n\n const initial = await runCase('initial admission', async () => {\n const engine = await fixture.open();\n const admit = method(engine);\n const selected = engineSelection(fixture.selection);\n check((selected.executable !== null) === (fixture.cli !== undefined),\n 'CLI selection requires CLI controls; a null executable must not supply them.');\n const admitted = await noModelCall(async () => engineSelection(await admit(request(), signal())));\n check(isDeepStrictEqual(admitted, selected), 'Admission changed the expected selection.');\n return { engine, selection: admitted };\n });\n if (!initial) return report();\n const first = initial.engine;\n const selected = initial.selection;\n\n await runCase('same instance retains selection', async () => {\n await fixture.cli?.moveLookup();\n const again = await noModelCall(async () => engineSelection(\n await method(first)(request(), signal(), selected),\n ));\n check(isDeepStrictEqual(again, selected), 'Re-admission changed the saved selection.');\n await runSelected(first, selected);\n });\n\n await runCase('replacement restores selection', async () => {\n const replacement = await fixture.open();\n const restored = await noModelCall(async () => engineSelection(\n await method(replacement)(request(), signal(), selected),\n ));\n check(isDeepStrictEqual(restored, selected), 'Replacement did not restore the saved selection.');\n await runSelected(replacement, selected);\n });\n\n const changed: ReadonlyArray<readonly [string, EngineSelectionRecord]> = [\n ['adapter', engineSelection({ ...selected, adapter: `${selected.adapter}-different` })],\n ['provider', engineSelection({ ...selected, provider: `${selected.provider ?? ''}-different` })],\n ['family', engineSelection({ ...selected, modelFamily: `${selected.modelFamily ?? ''}-different` })],\n ['model', engineSelection({ ...selected, model: `${selected.model ?? ''}-different` })],\n ['capabilities', engineSelection({\n ...selected, capabilities: selected.capabilities.length === 0 ? ['different'] : [],\n })],\n ['version', engineSelection({ ...selected, adapterVersion: `${selected.adapterVersion ?? ''}-different` })],\n ];\n for (const [field, expected] of changed) {\n await runCase(`changed ${field} is refused`, async () => {\n await noModelCall(async () => expectFailureKind(\n async () => method(first)(request(), signal(), expected), 'invalid-config',\n ));\n });\n }\n\n if (fixture.cli) {\n const cli = fixture.cli;\n await runCase('explicitly swapped path is refused', async () => {\n await noModelCall(async () => {\n const different = await cli.openDifferent();\n const other = engineSelection(await method(different)(request(), signal()));\n check(other.executable !== null && other.executable !== selected.executable,\n 'Different-executable fixture did not select a different path.');\n check(isDeepStrictEqual({ ...other, executable: selected.executable }, selected),\n 'Different-executable fixture also changed non-path identity.');\n const freshDifferent = await cli.openDifferent();\n await expectFailureKind(\n async () => method(freshDifferent)(request(), signal(), selected), 'invalid-config',\n );\n await expectFailureKind(\n async () => method(first)(request(), signal(), other), 'invalid-config',\n );\n });\n });\n await runCase('missing executable fails after construction', async () => {\n await noModelCall(async () => {\n const missing = await cli.openMissing();\n await expectFailureKind(async () => method(missing)(request(), signal()), 'missing-cli');\n await expectFailureKind(async () => missing.run(\n structuredClone(fixture.request), () => {}, signal(),\n ), 'missing-cli');\n const freshMissing = await cli.openMissing();\n method(freshMissing);\n await expectFailureKind(async () => freshMissing.run(\n structuredClone(fixture.request), () => {}, signal(),\n ), 'missing-cli');\n });\n });\n }\n return report();\n}\n","import { isDeepStrictEqual } from 'node:util';\n\nimport type {\n Memory,\n MemoryCommand,\n MemoryErrorCode,\n MemoryLimits,\n MemoryPath,\n MemoryResult,\n MemorySuccess,\n} from './memory-types.js';\n\nexport interface MemoryConformanceOptions {\n readonly scope: string;\n readonly limits?: Partial<MemoryLimits>;\n}\n\nexport type MemoryConformanceFactory = (\n options: MemoryConformanceOptions,\n) => Memory | Promise<Memory>;\n\nexport interface MemoryConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface MemoryConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly MemoryConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(factory: MemoryConformanceFactory, scope: string): Promise<void>;\n}\n\nfunction check(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message);\n}\n\nfunction same(actual: unknown, expected: unknown, message: string): void {\n if (!isDeepStrictEqual(actual, expected)) {\n throw new Error(`${message} Expected ${JSON.stringify(expected)}, received ${JSON.stringify(actual)}.`);\n }\n}\n\nasync function success(\n memory: Memory,\n command: MemoryCommand,\n): Promise<MemorySuccess> {\n const result = await memory.execute(command);\n if (!result.ok) {\n throw new Error(`Expected ${command.command} to succeed, received ${result.error.code}.`);\n }\n return result;\n}\n\nasync function failure(\n memory: Memory,\n command: MemoryCommand,\n code: MemoryErrorCode,\n): Promise<Extract<MemoryResult, { ok: false }>> {\n const result = await memory.execute(command);\n if (result.ok) throw new Error(`Expected ${command.command} to fail with ${code}.`);\n if (result.error.code !== code) {\n throw new Error(`Expected ${code}, received ${result.error.code}.`);\n }\n return result;\n}\n\nconst cases: readonly ConformanceCase[] = [\n {\n name: 'empty root view',\n async run(factory, scope) {\n const result = await success(await factory({ scope }), {\n command: 'view',\n path: '/memories',\n });\n same(result, {\n ok: true,\n command: 'view',\n value: { kind: 'directory', path: '/memories', entries: [] },\n }, 'The empty root view was not stable.');\n },\n },\n {\n name: 'create, overwrite, and ranged view',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const created = await success(memory, {\n command: 'create',\n path: '/memories/notes/plan.md',\n text: 'first\\nsecond\\nthird\\n',\n });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n check(created.value.overwritten === false, 'First create reported an overwrite.');\n\n const viewed = await success(memory, {\n command: 'view',\n path: '/memories/notes/plan.md',\n viewRange: [2, -1],\n });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'File view returned the wrong result.');\n same(viewed.value.lines, { start: 2, end: 3, total: 3 }, 'The line range was wrong.');\n check(viewed.value.text === 'second\\nthird\\n', 'The ranged text was wrong.');\n\n const overwritten = await success(memory, {\n command: 'create',\n path: '/memories/notes/plan.md',\n text: 'new',\n });\n check(overwritten.command === 'create' && overwritten.value.overwritten, 'Create did not overwrite.');\n },\n },\n {\n name: 'sorted immediate directory entries',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/z.md', text: 'z' });\n await success(memory, { command: 'create', path: '/memories/a/file.txt', text: 'a' });\n await success(memory, { command: 'create', path: '/memories/b.json', text: '{}' });\n const viewed = await success(memory, { command: 'view', path: '/memories' });\n check(viewed.command === 'view' && viewed.value.kind === 'directory', 'Root was not a directory.');\n same(viewed.value.entries, [\n { name: 'a', path: '/memories/a', kind: 'directory' },\n { name: 'b.json', path: '/memories/b.json', kind: 'file' },\n { name: 'z.md', path: '/memories/z.md', kind: 'file' },\n ], 'Directory entries were not immediate and sorted.');\n },\n },\n {\n name: 'unique string replacement',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'one two' });\n await success(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'one',\n newText: 'three',\n });\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'missing',\n newText: 'x',\n }, 'MATCH_NOT_FOUND');\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'x x' });\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'x',\n newText: 'y',\n }, 'MATCH_NOT_UNIQUE');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: '',\n newText: 'y',\n }, 'INVALID_ARGUMENT');\n },\n },\n {\n name: 'consistent ranged view and zero-based insertion lines',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const original = 'a\\r\\nc\\rd\\r\\n';\n await success(memory, { command: 'create', path: '/memories/a.md', text: original });\n\n const fullView = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(fullView.command === 'view' && fullView.value.kind === 'file', 'Full file could not be viewed.');\n check(fullView.value.text === original, 'A full view changed the stored line endings.');\n\n const rangedView = await success(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [2, 2],\n });\n check(rangedView.command === 'view' && rangedView.value.kind === 'file', 'Line range could not be viewed.');\n same(rangedView.value.lines, { start: 2, end: 2, total: 3 }, 'The ranged view used different line numbers from insert.');\n check(rangedView.value.text === 'c\\n', 'The ranged view did not return the selected logical line.');\n\n await success(memory, {\n command: 'insert',\n path: '/memories/a.md',\n insertLine: 2,\n text: 'b',\n });\n const viewed = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'Inserted file could not be viewed.');\n check(viewed.value.text === 'a\\nc\\nb\\nd\\n', 'Insert did not use the ranged view line numbers.');\n await failure(memory, {\n command: 'insert',\n path: '/memories/a.md',\n insertLine: 5,\n text: 'e',\n }, 'INVALID_RANGE');\n },\n },\n {\n name: 'recursive delete and protected root',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a/one.md', text: '1' });\n await success(memory, { command: 'create', path: '/memories/a/two.md', text: '22' });\n const deleted = await success(memory, { command: 'delete', path: '/memories/a' });\n same(deleted, {\n ok: true,\n command: 'delete',\n value: {\n path: '/memories/a',\n kind: 'directory',\n deletedFiles: 2,\n freedBytes: 3,\n },\n }, 'Directory deletion returned the wrong receipt.');\n await failure(memory, { command: 'delete', path: '/memories' }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'file and directory rename without overwrite',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a/one.md', text: '1' });\n const renamed = await success(memory, {\n command: 'rename',\n oldPath: '/memories/a',\n newPath: '/memories/b',\n });\n check(renamed.command === 'rename' && renamed.value.kind === 'directory', 'Directory rename failed.');\n check(renamed.value.movedFiles === 1, 'Directory rename moved the wrong file count.');\n await success(memory, { command: 'create', path: '/memories/c.md', text: 'c' });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/b/one.md',\n newPath: '/memories/c.md',\n }, 'ALREADY_EXISTS');\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories',\n newPath: '/memories/root',\n }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'path and extension safety',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await failure(memory, {\n command: 'create',\n path: '/memories/../escape.md',\n text: 'x',\n }, 'INVALID_PATH');\n await failure(memory, {\n command: 'create',\n path: '/memories/a%2Fescape.md',\n text: 'x',\n }, 'INVALID_PATH');\n await failure(memory, {\n command: 'create',\n path: '/memories/code.ts',\n text: 'x',\n }, 'INVALID_EXTENSION');\n await success(memory, {\n command: 'create',\n path: '/memories/note.md',\n text: 'x',\n });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/note.md',\n newPath: '/memories/code.ts',\n }, 'INVALID_EXTENSION');\n await failure(memory, {\n command: 'create',\n path: '/memories',\n text: 'x',\n }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'path conflict safety',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/file.md', text: 'x' });\n await failure(memory, {\n command: 'create',\n path: '/memories/file.md/child.txt',\n text: 'y',\n }, 'PATH_CONFLICT');\n await success(memory, { command: 'create', path: '/memories/dir/child.md', text: 'y' });\n await failure(memory, {\n command: 'create',\n path: '/memories/dir',\n text: 'z',\n }, 'INVALID_EXTENSION');\n },\n },\n {\n name: 'invalid line ranges',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'one\\ntwo' });\n await failure(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [0, 1],\n }, 'INVALID_RANGE');\n await failure(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [1, 3],\n }, 'INVALID_RANGE');\n },\n },\n {\n name: 'deterministic least-recently-written eviction',\n async run(factory, scope) {\n const memory = await factory({ scope, limits: { maxFiles: 2 } });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(memory, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(memory, { command: 'view', path: '/memories/a.md' });\n const created = await success(memory, { command: 'create', path: '/memories/c.md', text: 'c' });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n same(created.value.evicted, ['/memories/a.md'], 'View changed eviction recency.');\n await failure(memory, { command: 'view', path: '/memories/a.md' }, 'NOT_FOUND');\n\n const overwritten = await factory({ scope: `${scope}-overwrite`, limits: { maxFiles: 2 } });\n await success(overwritten, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(overwritten, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(overwritten, { command: 'create', path: '/memories/a.md', text: 'new' });\n const afterOverwrite = await success(overwritten, {\n command: 'create',\n path: '/memories/c.md',\n text: 'c',\n });\n check(afterOverwrite.command === 'create', 'Create returned the wrong receipt.');\n same(afterOverwrite.value.evicted, ['/memories/b.md'], 'Overwrite did not refresh write recency.');\n\n const renamed = await factory({ scope: `${scope}-rename`, limits: { maxFiles: 2 } });\n await success(renamed, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(renamed, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(renamed, {\n command: 'rename',\n oldPath: '/memories/a.md',\n newPath: '/memories/renamed.md',\n });\n const afterRename = await success(renamed, {\n command: 'create',\n path: '/memories/c.md',\n text: 'c',\n });\n check(afterRename.command === 'create', 'Create returned the wrong receipt.');\n same(afterRename.value.evicted, ['/memories/renamed.md'], 'Rename changed write recency.');\n },\n },\n {\n name: 'total-byte eviction',\n async run(factory, scope) {\n const memory = await factory({\n scope,\n limits: { maxFileBytes: 4, maxTotalBytes: 4, maxFiles: 3 },\n });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'aa' });\n await success(memory, { command: 'create', path: '/memories/b.md', text: 'bb' });\n const created = await success(memory, { command: 'create', path: '/memories/c.md', text: 'cc' });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n same(created.value.evicted, ['/memories/a.md'], 'Total-byte eviction chose the wrong file.');\n },\n },\n {\n name: 'limit failure is atomic and never evicts the target',\n async run(factory, scope) {\n const memory = await factory({\n scope,\n limits: { maxFileBytes: 4, maxTotalBytes: 4, maxFiles: 1 },\n });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'safe' });\n await failure(memory, { command: 'create', path: '/memories/b.md', text: 'large' }, 'LIMIT_EXCEEDED');\n const viewed = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'Atomic failure removed the old file.');\n check(viewed.value.text === 'safe', 'Atomic failure changed the old file.');\n },\n },\n {\n name: 'scope isolation',\n async run(factory, scope) {\n const first = await factory({ scope: `${scope}-first` });\n const second = await factory({ scope: `${scope}-second` });\n await success(first, { command: 'create', path: '/memories/a.md', text: 'private' });\n await failure(second, { command: 'view', path: '/memories/a.md' }, 'NOT_FOUND');\n },\n },\n {\n name: 'rename validates every moved path atomically',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const segment = 's'.repeat(128);\n const fileName = `${'f'.repeat(125)}.md`;\n const sourcePath = `/memories/a/${[segment, segment, segment, segment, segment, segment, fileName].join('/')}` as MemoryPath;\n const destination = `/memories/${'b'.repeat(128)}` as MemoryPath;\n await success(memory, { command: 'create', path: sourcePath, text: 'safe' });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/a',\n newPath: destination,\n }, 'INVALID_PATH');\n await success(memory, { command: 'view', path: sourcePath });\n },\n },\n {\n name: 'UTF-8 byte limits',\n async run(factory, scope) {\n const memory = await factory({ scope, limits: { maxFileBytes: 4 } });\n const created = await success(memory, { command: 'create', path: '/memories/a.md', text: '££' });\n check(created.command === 'create' && created.value.byteLength === 4, 'Byte length was not UTF-8.');\n await failure(memory, { command: 'create', path: '/memories/b.md', text: '£££' }, 'LIMIT_EXCEEDED');\n\n const emoji = await success(memory, {\n command: 'create',\n path: '/memories/emoji.md',\n text: '🧠',\n });\n check(emoji.command === 'create' && emoji.value.byteLength === 4, 'A valid surrogate pair was rejected.');\n await failure(memory, {\n command: 'create',\n path: '/memories/high.md',\n text: '\\uD800',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/emoji.md',\n oldText: '\\uDC00',\n newText: 'x',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/emoji.md',\n oldText: '🧠',\n newText: '\\uD800',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'insert',\n path: '/memories/emoji.md',\n insertLine: 0,\n text: '\\uDC00',\n }, 'INVALID_ARGUMENT');\n },\n },\n {\n name: 'invalid command and argument errors',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const invalidCommand = await memory.execute({ command: 'write' } as unknown as MemoryCommand);\n check(!invalidCommand.ok, 'An unknown command succeeded.');\n check(invalidCommand.command === 'write', 'The failure did not retain the supplied command.');\n check(invalidCommand.error.code === 'INVALID_COMMAND', 'An unknown command returned the wrong code.');\n\n const invalidPath = await memory.execute({ command: 'view' } as unknown as MemoryCommand);\n check(!invalidPath.ok && invalidPath.error.code === 'INVALID_ARGUMENT', 'A missing path returned the wrong code.');\n },\n },\n];\n\nexport async function runMemoryConformance(\n factory: MemoryConformanceFactory,\n): Promise<MemoryConformanceReport> {\n const failures: MemoryConformanceFailure[] = [];\n\n for (const [index, testCase] of cases.entries()) {\n try {\n await testCase.run(factory, `memory-conformance-${index + 1}`);\n } catch (error) {\n failures.push({\n case: testCase.name,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return {\n ok: failures.length === 0,\n cases: cases.length,\n failures,\n };\n}\n\nexport async function assertMemoryConformance(\n factory: MemoryConformanceFactory,\n): Promise<void> {\n const report = await runMemoryConformance(factory);\n if (report.ok) return;\n\n const details = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('\\n');\n throw new Error(`Memory adapter failed ${report.failures.length} conformance case(s).\\n${details}`);\n}\n","import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { StorageError, type StorageErrorCode } from '../storage/error.js';\nimport type {\n DomainEventEnvelope,\n EventStreamRef,\n NewDomainEvent,\n} from './envelope.js';\nimport type { DomainEventBatch, EventStore } from './store.js';\n\nexport interface EventStoreConformanceOptions {\n readonly maxEventPayloadBytes: number;\n readonly maxAppendBatchBytes: number;\n readonly knownSecrets: readonly string[];\n}\n\nexport type EventStoreConformanceFactory = (\n options: EventStoreConformanceOptions,\n) => EventStore | Promise<EventStore>;\n\ninterface EventStoreConformanceFixture {\n readonly maxEventPayloadBytes: number;\n readonly maxAppendBatchBytes: number;\n readonly knownSecret: string;\n open(): EventStore | Promise<EventStore>;\n}\n\nexport interface EventStoreConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface EventStoreConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly EventStoreConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(): Promise<void>;\n}\n\nconst DEFAULT_OPTIONS: EventStoreConformanceOptions = {\n maxEventPayloadBytes: 1_024,\n maxAppendBatchBytes: 8_192,\n knownSecrets: ['conformance-secret'],\n};\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction assert(condition: unknown, failure: string): asserts condition {\n if (!condition) throw new Error(failure);\n}\n\nasync function collect(\n values: AsyncIterable<DomainEventEnvelope>,\n): Promise<readonly DomainEventEnvelope[]> {\n const result: DomainEventEnvelope[] = [];\n for await (const value of values) result.push(value);\n return result;\n}\n\nasync function expectStorageError(\n action: () => Promise<unknown>,\n code: StorageErrorCode,\n): Promise<void> {\n try {\n await action();\n } catch (error) {\n if (error instanceof StorageError && error.code === code) return;\n throw new Error(\n `Expected StorageError ${code}, received ${message(error)}.`,\n );\n }\n throw new Error(`Expected StorageError ${code}, but the operation succeeded.`);\n}\n\nfunction conformanceId(prefix: string): string {\n return `${prefix}-${randomUUID().replaceAll('-', '')}`;\n}\n\nfunction stream(prefix: string): EventStreamRef {\n return {\n namespace: conformanceId('namespace'),\n streamId: conformanceId(prefix),\n };\n}\n\nfunction event(\n eventId: string,\n payload: NewDomainEvent['payload'] = {},\n): NewDomainEvent {\n return {\n eventId,\n type: 'conformance:recorded',\n version: 1,\n timestamp: '2026-08-26T04:00:00.000Z',\n correlationId: 'conformance-run',\n causationId: null,\n payload,\n };\n}\n\nfunction batchPastLimit(maximumBytes: number): DomainEventBatch {\n const events: NewDomainEvent[] = [];\n let bytes = 0;\n while (bytes <= maximumBytes) {\n const next = event(`batch-${events.length}`, { text: 'x' });\n events.push(next);\n const envelope = {\n ...next,\n envelopeVersion: 1,\n streamId: 'batch-limit',\n revision: events.length,\n };\n bytes += Buffer.byteLength(`${JSON.stringify(envelope)}\\n`, 'utf8');\n }\n return events as unknown as DomainEventBatch;\n}\n\nfunction validateFixture(fixture: EventStoreConformanceFixture): void {\n for (const [name, value] of [\n ['maxEventPayloadBytes', fixture.maxEventPayloadBytes],\n ['maxAppendBatchBytes', fixture.maxAppendBatchBytes],\n ] as const) {\n if (!Number.isSafeInteger(value) || value < 64 || value > 1_000_000) {\n throw new Error(`${name} must be a safe integer from 64 through 1000000 for conformance.`);\n }\n }\n if (\n typeof fixture.knownSecret !== 'string'\n || fixture.knownSecret.length === 0\n ) {\n throw new Error('knownSecret must be a non-empty configured secret.');\n }\n}\n\n/** Run framework-free checks against an outside EventStore implementation. */\nexport async function runEventStoreConformance(\n factory: EventStoreConformanceFactory,\n): Promise<EventStoreConformanceReport> {\n const fixture: EventStoreConformanceFixture = {\n maxEventPayloadBytes: DEFAULT_OPTIONS.maxEventPayloadBytes,\n maxAppendBatchBytes: DEFAULT_OPTIONS.maxAppendBatchBytes,\n knownSecret: DEFAULT_OPTIONS.knownSecrets[0]!,\n open: () => factory(DEFAULT_OPTIONS),\n };\n validateFixture(fixture);\n const cases: readonly ConformanceCase[] = [\n {\n name: 'side-effect-free preflight',\n async run() {\n const target = stream('preflight');\n const store = await fixture.open();\n const candidate = event(conformanceId('event'));\n await store.preflightAppend(target, 0, [candidate]);\n assert(\n (await collect(store.read(target))).length === 0,\n 'Preflight made an event visible.',\n );\n const revision = await store.append(target, 0, [candidate]);\n assert(revision === 1, 'Preflight changed the later append revision.');\n },\n },\n {\n name: 'ordered durable append',\n async run() {\n const target = stream('ordered');\n const first = await fixture.open();\n const source = event(conformanceId('event'), {\n extension: { preserved: true },\n });\n const second = event(conformanceId('event'));\n const firstId = source.eventId;\n const secondId = second.eventId;\n const revision = await first.append(target, 0, [source, second]);\n assert(revision === 2, `Append returned revision ${revision} instead of 2.`);\n\n (source.payload as { extension: { preserved: boolean } })\n .extension.preserved = false;\n const reopened = await fixture.open();\n const all = await collect(reopened.read(target));\n assert(all.length === 2, `Reopened stream returned ${all.length} events instead of 2.`);\n assert(\n all[0]?.eventId === firstId\n && all[0].revision === 1\n && all[1]?.eventId === secondId\n && all[1].revision === 2,\n 'Reopened stream changed event order or assigned revisions.',\n );\n assert(\n isDeepStrictEqual(all[0]?.payload, {\n extension: { preserved: true },\n }),\n 'Stored event changed caller-owned or graph-owned payload data.',\n );\n const after = await collect(reopened.read(target, 1));\n assert(\n after.length === 1 && after[0]?.eventId === secondId,\n 'Exclusive afterRevision read returned the wrong events.',\n );\n },\n },\n {\n name: 'exact append retry',\n async run() {\n const target = stream('retry');\n const source = event(conformanceId('event'), { value: 'same' });\n const first = await fixture.open();\n await first.append(target, 0, [source]);\n\n const reopened = await fixture.open();\n const revision = await reopened.append(target, 0, [source]);\n assert(\n revision === 1,\n `Exact append retry returned revision ${revision} instead of 1.`,\n );\n assert(\n (await collect(reopened.read(target))).length === 1,\n 'Exact append retry committed the event twice.',\n );\n await expectStorageError(\n () => reopened.append(target, 0, [event(source.eventId, {\n value: 'changed',\n })]),\n 'REVISION_CONFLICT',\n );\n },\n },\n {\n name: 'restart policy identity',\n async run() {\n const target = stream('policy');\n const first = await fixture.open();\n const recorded = event(conformanceId('event'));\n await first.append(target, 0, [recorded]);\n\n const rotatedSecrets = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: ['replacement-conformance-secret'],\n });\n assert(\n (await collect(rotatedSecrets.read(target)))[0]?.eventId\n === recorded.eventId,\n 'Changing live secret screening made committed events unreadable.',\n );\n\n const changedLimits = await factory({\n ...DEFAULT_OPTIONS,\n maxEventPayloadBytes: DEFAULT_OPTIONS.maxEventPayloadBytes + 1,\n });\n await expectStorageError(\n () => collect(changedLimits.read(target)),\n 'INVALID_STORED_VALUE',\n );\n },\n },\n {\n name: 'atomic expected revision',\n async run() {\n const target = stream('concurrent');\n const left = await fixture.open();\n const right = await fixture.open();\n const results = await Promise.allSettled([\n left.append(target, 0, [event(conformanceId('event'))]),\n right.append(target, 0, [event(conformanceId('event'))]),\n ]);\n assert(\n results.filter((result) => result.status === 'fulfilled').length === 1,\n 'Two writers committed the same expected revision.',\n );\n const rejected = results.find((result) => result.status === 'rejected');\n assert(\n rejected?.status === 'rejected'\n && rejected.reason instanceof StorageError\n && rejected.reason.code === 'REVISION_CONFLICT',\n 'Losing writer did not receive REVISION_CONFLICT.',\n );\n assert(\n (await collect((await fixture.open()).read(target))).length === 1,\n 'Concurrent append exposed a partial or duplicate batch.',\n );\n },\n },\n {\n name: 'duplicate event identity',\n async run() {\n const target = stream('duplicate');\n const store = await fixture.open();\n const duplicate = event(conformanceId('event'));\n await store.append(target, 0, [duplicate]);\n await expectStorageError(\n () => store.append(target, 1, [duplicate]),\n 'DUPLICATE_EVENT_ID',\n );\n assert(\n (await collect(store.read(target))).length === 1,\n 'Rejected duplicate append changed the stream.',\n );\n },\n },\n {\n name: 'namespace isolation',\n async run() {\n const streamId = conformanceId('shared-stream');\n const left = { namespace: conformanceId('left'), streamId };\n const right = { namespace: conformanceId('right'), streamId };\n const store = await fixture.open();\n const leftEvent = event(conformanceId('left-event'));\n const rightEvent = event(conformanceId('right-event'));\n await store.append(left, 0, [leftEvent]);\n await store.append(right, 0, [rightEvent]);\n assert(\n (await collect(store.read(left)))[0]?.eventId === leftEvent.eventId\n && (await collect(store.read(right)))[0]?.eventId === rightEvent.eventId,\n 'Equal stream ids in separate namespaces collided.',\n );\n },\n },\n {\n name: 'bounded append',\n async run() {\n const store = await fixture.open();\n const payloadTarget = stream('payload-limit');\n await expectStorageError(\n () => store.append(payloadTarget, 0, [event(\n conformanceId('event'),\n { text: 'x'.repeat(fixture.maxEventPayloadBytes) },\n )]),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n const batchTarget = stream('batch-limit');\n await expectStorageError(\n () => store.append(\n batchTarget,\n 0,\n batchPastLimit(fixture.maxAppendBatchBytes),\n ),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n assert(\n (await collect(store.read(payloadTarget))).length === 0\n && (await collect(store.read(batchTarget))).length === 0,\n 'Rejected oversized append changed a stream.',\n );\n },\n },\n {\n name: 'known-secret rejection',\n async run() {\n const target = stream('known-secret');\n const store = await fixture.open();\n const secretEvent = event(\n conformanceId('event'),\n { text: `before ${fixture.knownSecret} after` },\n );\n await expectStorageError(\n () => store.preflightAppend(target, 0, [secretEvent]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n () => store.append(target, 0, [secretEvent]),\n 'KNOWN_SECRET',\n );\n assert(\n (await collect(store.read(target))).length === 0,\n 'Known-secret rejection persisted an event.',\n );\n },\n },\n {\n name: 'semantic known-secret rejection',\n async run() {\n const target = stream('semantic-known-secret');\n const options = {\n ...DEFAULT_OPTIONS,\n knownSecrets: ['line\\nbreak'],\n };\n const store = await factory(options);\n const secretEvent = event(\n conformanceId('event'),\n { text: 'before line\\nbreak after' },\n );\n const failures: string[] = [];\n for (const operation of [\n () => store.preflightAppend(target, 0, [secretEvent]),\n () => store.append(target, 0, [secretEvent]),\n ]) {\n try {\n await expectStorageError(operation, 'KNOWN_SECRET');\n } catch (error) {\n failures.push(message(error));\n }\n }\n const reopened = await factory(options);\n if ((await collect(reopened.read(target))).length !== 0) {\n failures.push('Escaped known-secret rejection persisted an event.');\n }\n assert(failures.length === 0, failures.join(' '));\n },\n },\n ];\n\n const failures: EventStoreConformanceFailure[] = [];\n for (const item of cases) {\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n}\n\n/** Throw one readable error when an outside EventStore breaks the contract. */\nexport async function assertEventStoreConformance(\n factory: EventStoreConformanceFactory,\n): Promise<void> {\n const report = await runEventStoreConformance(factory);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Event store conformance failed: ${detail}`);\n}\n","import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { StorageError } from '../storage/error.js';\nimport type {\n ArtifactBatch,\n ArtifactReference,\n ArtifactScope,\n ArtifactStore,\n} from './store.js';\n\nexport interface ArtifactStoreConformanceOptions {\n readonly maxArtifactBytes: number;\n readonly maxTotalArtifactBytesPerRun: number;\n readonly knownSecrets: readonly string[];\n}\n\nexport type ArtifactStoreConformanceFactory = (\n options: ArtifactStoreConformanceOptions,\n) => ArtifactStore | Promise<ArtifactStore>;\n\nexport interface ArtifactStoreConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface ArtifactStoreConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly ArtifactStoreConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(factory: ArtifactStoreConformanceFactory, scope: ConformanceScope): Promise<void>;\n}\n\ntype ConformanceScope = (name: string) => ArtifactScope;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst HELLO_DIGEST =\n 'sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824';\nconst DEFAULT_OPTIONS: ArtifactStoreConformanceOptions = {\n maxArtifactBytes: 64,\n maxTotalArtifactBytesPerRun: 128,\n knownSecrets: ['known-secret-value'],\n};\n\nfunction artifact(text: string, purpose = 'proof') {\n return {\n bytes: encoder.encode(text),\n mediaType: 'text/plain',\n purpose,\n contentMode: 'exact' as const,\n };\n}\n\nfunction check(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message);\n}\n\nasync function expectStorageError(\n operation: Promise<unknown>,\n code: StorageError['code'],\n): Promise<void> {\n try {\n await operation;\n } catch (error) {\n if (error instanceof StorageError && error.code === code) return;\n throw new Error(\n `Expected ${code}, received ${error instanceof Error ? error.message : String(error)}.`,\n );\n }\n throw new Error(`Expected ${code}, but the operation succeeded.`);\n}\n\nconst cases: readonly ConformanceCase[] = [\n {\n name: 'content address and detached read',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('content');\n await expectStorageError(\n store.preflightWrite(location, [] as unknown as ArtifactBatch),\n 'INVALID_STORED_VALUE',\n );\n const [predicted] = await store.preflightWrite(location, [artifact('hello')]);\n check(predicted !== undefined, 'Preflight did not predict a reference.');\n await expectStorageError(store.read(location, predicted), 'ARTIFACT_NOT_ADMITTED');\n const reference = await store.write(location, artifact('hello'));\n check(isDeepStrictEqual(reference, predicted), 'Write did not issue its predicted reference.');\n check(isDeepStrictEqual(reference, {\n schemaVersion: 1,\n digest: HELLO_DIGEST,\n byteLength: 5,\n mediaType: 'text/plain',\n purpose: 'proof',\n }), `Reference was ${JSON.stringify(reference)}.`);\n const first = await store.read(location, reference);\n first[0] = 0;\n const second = await store.read(location, reference);\n check(decoder.decode(second) === 'hello', 'A caller changed stored bytes through a read result.');\n },\n },\n {\n name: 'fresh-provider durable read',\n async run(factory, scope) {\n const location = scope('durable');\n const writer = await factory(DEFAULT_OPTIONS);\n const reference = await writer.write(location, artifact('durable'));\n const reader = await factory(DEFAULT_OPTIONS);\n const saved = await reader.read(location, reference);\n check(decoder.decode(saved) === 'durable', 'A fresh provider could not read admitted bytes.');\n },\n },\n {\n name: 'restart policy identity',\n async run(factory, scope) {\n const location = scope('policy');\n const writer = await factory(DEFAULT_OPTIONS);\n const reference = await writer.write(location, artifact('durable'));\n\n const rotatedSecrets = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: ['replacement-secret-value'],\n });\n check(\n decoder.decode(await rotatedSecrets.read(location, reference)) === 'durable',\n 'Changing live secret screening made admitted bytes unreadable.',\n );\n\n const changedLimits = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: DEFAULT_OPTIONS.maxArtifactBytes + 1,\n });\n await expectStorageError(\n changedLimits.read(location, reference),\n 'INVALID_STORED_VALUE',\n );\n },\n },\n {\n name: 'forged exact receipt rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('forged-receipt');\n const reference = await store.write(location, artifact('private'));\n await expectStorageError(store.read(location, {\n ...reference,\n purpose: 'forged-purpose',\n }), 'ARTIFACT_NOT_ADMITTED');\n },\n },\n {\n name: 'two-provider final-capacity race',\n async run(factory, scope) {\n const options = {\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 5,\n };\n const first = await factory(options);\n const second = await factory(options);\n const location = scope('final-capacity-race');\n const results = await Promise.allSettled([\n first.write(location, artifact('aaa')),\n second.write(location, artifact('bbb')),\n ]);\n check(\n results.filter((result) => result.status === 'fulfilled').length === 1,\n 'Two providers did not admit exactly one final-capacity artifact.',\n );\n const rejected = results.find((result) => result.status === 'rejected');\n check(\n rejected?.status === 'rejected'\n && rejected.reason instanceof StorageError\n && rejected.reason.code === 'STORAGE_LIMIT_EXCEEDED',\n 'The losing provider did not report the run storage limit.',\n );\n },\n },\n {\n name: 'one-byte address change',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('address');\n const first = await store.write(location, artifact('hello'));\n const second = await store.write(location, artifact('hellp'));\n check(first.digest !== second.digest, 'Different bytes returned the same digest.');\n },\n },\n {\n name: 'namespace isolation',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const reference = await store.write(scope('namespace-a'), artifact('private'));\n await expectStorageError(\n store.read(scope('namespace-b'), reference),\n 'ARTIFACT_NOT_ADMITTED',\n );\n },\n },\n {\n name: 'run isolation',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('run');\n const reference = await store.write(location, artifact('private'));\n await expectStorageError(\n store.read({ ...location, runId: 'run-two' }, reference),\n 'ARTIFACT_NOT_ADMITTED',\n );\n },\n },\n {\n name: 'marked sensitive rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n await expectStorageError(\n store.write(scope('sensitive'), { ...artifact('private'), sensitive: true }),\n 'SENSITIVE_CONTENT',\n );\n },\n },\n {\n name: 'known secret rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n await expectStorageError(\n store.write(scope('secret'), artifact('token=known-secret-value')),\n 'KNOWN_SECRET',\n );\n },\n },\n {\n name: 'semantic secret rejection',\n async run(factory, scope) {\n const metadataSecret = 'quote\"token';\n const stateSecret = 'line\\nbreak';\n const store = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: [metadataSecret, stateSecret],\n });\n const metadataArtifact = artifact('safe', metadataSecret);\n await expectStorageError(\n store.preflightWrite(scope('secret-metadata'), [metadataArtifact]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n store.write(scope('secret-metadata'), metadataArtifact),\n 'KNOWN_SECRET',\n );\n\n const stateArtifact = {\n bytes: encoder.encode(JSON.stringify({ token: stateSecret })),\n mediaType: 'application/problem+json',\n purpose: 'state',\n contentMode: 'state' as const,\n };\n await expectStorageError(\n store.preflightWrite(scope('secret-state'), [stateArtifact]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n store.write(scope('secret-state'), stateArtifact),\n 'KNOWN_SECRET',\n );\n },\n },\n {\n name: 'free-text redaction before receipt',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('redaction');\n const reference = await store.write(location, {\n ...artifact('token=known-secret-value'),\n contentMode: 'free-text',\n });\n const saved = await store.read(location, reference);\n check(decoder.decode(saved) === 'token=[redacted]', 'Known secret was not redacted.');\n check(reference.byteLength === 16, 'Receipt size was not calculated after redaction.');\n },\n },\n {\n name: 'single-artifact limit',\n async run(factory, scope) {\n const store = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 8,\n });\n await expectStorageError(\n store.write(scope('item-limit'), artifact('123456')),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n },\n },\n {\n name: 'unique-digest run quota',\n async run(factory, scope) {\n const store = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 5,\n });\n const location = scope('run-limit');\n await expectStorageError(store.preflightWrite(location, [\n artifact('aaa'),\n artifact('bbb'),\n ]), 'STORAGE_LIMIT_EXCEEDED');\n const first = await store.write(location, artifact('12345'));\n const duplicate = await store.write(location, artifact('12345', 'second-use'));\n check(first.digest === duplicate.digest, 'Duplicate content changed its digest.');\n await expectStorageError(\n store.write(location, artifact('x')),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n },\n },\n {\n name: 'run deletion',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('delete');\n const reference = await store.write(location, artifact('hello'));\n await store.deleteRun(location);\n await expectStorageError(store.read(location, reference), 'ARTIFACT_NOT_ADMITTED');\n },\n },\n];\n\n/** Run the framework-free behavioral checks for an ArtifactStore provider. */\nexport async function runArtifactStoreConformance(\n factory: ArtifactStoreConformanceFactory,\n): Promise<ArtifactStoreConformanceReport> {\n const invocation = randomUUID();\n const scope: ConformanceScope = (name) => ({\n namespace: `conformance-${invocation}-${name}`,\n runId: 'run-one',\n });\n const failures: ArtifactStoreConformanceFailure[] = [];\n for (const testCase of cases) {\n try {\n await testCase.run(factory, scope);\n } catch (error) {\n failures.push({\n case: testCase.name,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n}\n\n/** Throw one readable error when an ArtifactStore provider breaks the contract. */\nexport async function assertArtifactStoreConformance(\n factory: ArtifactStoreConformanceFactory,\n): Promise<void> {\n const report = await runArtifactStoreConformance(factory);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Artifact store conformance failed: ${detail}`);\n}\n","/**\n * The workspace provider conformance kit (roadmap D12): the behavioral\n * checks every provider must pass — capture and verify naming drift, the\n * lease lifecycle with typed second claims, fork requiring a held lease\n * and starting at the anchored revision, and recovery never stealing a\n * live lease. Framework-free, like the graph kit.\n */\n\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { WorkspaceAnchor, WorkspaceProvider } from './provider.js';\n\nexport interface WorkspaceProviderConformanceFixture {\n readonly provider: WorkspaceProvider;\n /** An anchor captured from the prepared workspace. */\n readonly anchor: WorkspaceAnchor;\n /** A unique child identity for the fork cases. */\n readonly childId: string;\n /** Mutates the workspace after the fork cases, so drift is observable. */\n readonly driftWorkspace: () => Promise<void>;\n}\n\nexport interface WorkspaceProviderConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface WorkspaceProviderConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly WorkspaceProviderConformanceFailure[];\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n/** Run the behavioral checks for any workspace provider. */\nexport function runWorkspaceProviderConformance(\n fixture: WorkspaceProviderConformanceFixture,\n): Promise<WorkspaceProviderConformanceReport> {\n const { provider, anchor, childId, driftWorkspace } = fixture;\n const cases: { name: string; run: () => Promise<void> }[] = [\n {\n name: 'verify ok on the captured anchor',\n run: async () => {\n const result = await provider.verify(anchor);\n if (!isDeepStrictEqual(result, { ok: true })) {\n throw new Error(`expected ok, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'fork requires a lease held for the anchor',\n run: async () => {\n const result = await provider.fork(anchor, childId, 'not-a-token');\n if (!(result.ok === false && result.kind === 'unleased')) {\n throw new Error(`expected an unleased refusal, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'lease lifecycle: acquire, second claim held, release, reacquire',\n run: async () => {\n const first = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (first.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(first)}`);\n }\n const second = await provider.acquireLease('kit-other', 'kit-scope', anchor);\n if (!(second.ok === false && second.kind === 'held' && second.owner === 'kit-owner')) {\n throw new Error(`second claim not typed as held: ${JSON.stringify(second)}`);\n }\n const wrongRelease = await provider.releaseLease('not-the-token');\n if (!(wrongRelease.ok === false && wrongRelease.kind === 'not-owner')) {\n throw new Error(`wrong token release not refused: ${JSON.stringify(wrongRelease)}`);\n }\n const released = await provider.releaseLease(first.token);\n if (released.ok !== true) {\n throw new Error(`release failed: ${JSON.stringify(released)}`);\n }\n const reacquired = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (reacquired.ok !== true) {\n throw new Error(`reacquire failed: ${JSON.stringify(reacquired)}`);\n }\n const reRelease = await provider.releaseLease(\n reacquired.ok === true ? reacquired.token : '',\n );\n if (reRelease.ok !== true) {\n throw new Error(`reacquired release failed: ${JSON.stringify(reRelease)}`);\n }\n },\n },\n {\n name: 'fork starts at the anchored revision under its lease',\n run: async () => {\n const lease = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (lease.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(lease)}`);\n }\n const forked = await provider.fork(anchor, childId, lease.token);\n if (forked.ok !== true) {\n throw new Error(`fork failed: ${JSON.stringify(forked)}`);\n }\n if (forked.anchor.head !== anchor.head) {\n throw new Error('the forked worktree does not start at the anchored revision');\n }\n const released = await provider.releaseLease(lease.token);\n if (released.ok !== true) {\n throw new Error(`release failed: ${JSON.stringify(released)}`);\n }\n },\n },\n {\n name: 'recovery on no lease is typed, not a steal',\n run: async () => {\n const result = await provider.recoverIncompleteLease();\n if (!(result.ok === false && result.kind === 'none')) {\n throw new Error(`expected a typed none, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'drift is named and a changed anchor refuses fork',\n run: async () => {\n await driftWorkspace();\n const drifted = await provider.verify(anchor);\n if (drifted.ok !== false || drifted.drift.length === 0) {\n throw new Error(`expected named drift, received ${JSON.stringify(drifted)}`);\n }\n const lease = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (lease.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(lease)}`);\n }\n const forked = await provider.fork(anchor, `${childId}-drift`, lease.token);\n if (!(forked.ok === false && forked.kind === 'anchor-changed')) {\n throw new Error(`expected an anchor-changed refusal, received ${JSON.stringify(forked)}`);\n }\n await provider.releaseLease(lease.token);\n },\n },\n ];\n\n return (async () => {\n const failures: WorkspaceProviderConformanceFailure[] = [];\n for (const item of cases) {\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures),\n });\n })();\n}\n\n/** Throw one readable error when a provider breaks the contract. */\nexport async function assertWorkspaceProviderConformance(\n fixture: WorkspaceProviderConformanceFixture,\n): Promise<void> {\n const report = await runWorkspaceProviderConformance(fixture);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Workspace provider conformance failed: ${detail}`);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engine-conformance.ts","../src/memory-conformance.ts","../src/events/conformance.ts","../src/artifacts/conformance.ts","../src/workspace/conformance.ts"],"names":["failure","event","cases","selected","check","message","isDeepStrictEqual","failures","DEFAULT_OPTIONS","expectStorageError","randomUUID"],"mappings":"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","file":"testing.js","sourcesContent":["import { isDeepStrictEqual } from 'node:util';\n\nimport { EngineError, classifyEngineFailure, type EngineFailureKind } from './error.js';\nimport type {\n AgentRequest,\n AgentResult,\n AgentResultPart,\n Engine,\n EngineSelectionRecord,\n EngineStreamEvent,\n} from './contracts.js';\nimport type { JsonValue } from './json.js';\nimport { modelIdentity } from './model-identity.js';\nimport { engineSelection, validateAgentResult } from './result.js';\n\nexport type EngineConformanceScenario =\n | 'ordered-parts'\n | 'structured-result'\n | 'unknown-usage'\n | 'reported-usage'\n | 'tool-events'\n | 'late-final'\n | 'cancellation'\n | 'missing-cli'\n | 'auth'\n | 'billing'\n | 'model-unavailable'\n | 'rate-limit'\n | 'quota'\n | 'transient'\n | 'timeout'\n | 'invalid-config'\n | 'read-access'\n | 'workspace-none'\n | 'workspace-read'\n | 'workspace-write';\n\ntype WorkspaceMode = NonNullable<AgentRequest['workspaceMode']>;\ntype FeatureScenario = Exclude<EngineConformanceScenario, 'read-access' | `workspace-${WorkspaceMode}`>;\n\nexport interface EngineConformanceFixture {\n readonly request: AgentRequest;\n readonly requested: EngineSelectionRecord;\n readonly effective: EngineSelectionRecord;\n readonly unsupported?: Partial<Record<FeatureScenario, string>>;\n readonly workspace: {\n readonly modes: Record<WorkspaceMode, {\n readonly request: AgentRequest;\n readonly outcome: 'supported' | 'refused';\n readonly requested?: EngineSelectionRecord;\n readonly effective?: EngineSelectionRecord;\n }>;\n /** Observe actual process arguments or provider options, never the input request. */\n observe(): {\n readonly modelCalls: number;\n readonly canRead: boolean;\n readonly canWrite: boolean;\n } | Promise<{\n readonly modelCalls: number;\n readonly canRead: boolean;\n readonly canWrite: boolean;\n }>;\n };\n /** Parse a final assistant part when the backend has no native schema mode. */\n readonly parseStructuredResult?: (\n part: AgentResultPart,\n parts: readonly AgentResultPart[],\n ) => JsonValue;\n /**\n * True for an adapter whose provider and model family come from the model\n * it was given rather than from its own name (OpenCode, Devin). The kit then\n * checks that the identity it reports is the one `modelIdentity` reads from\n * the reported model, so two seats on one model cannot pass as two families.\n */\n readonly identityFromModel?: boolean;\n open(scenario: EngineConformanceScenario): Engine | Promise<Engine>;\n}\n\nexport interface EngineConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface EngineConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly EngineConformanceFailure[];\n}\n\nexport interface EngineAdapterConformanceReport extends EngineConformanceReport {\n readonly unsupported: readonly { readonly case: FeatureScenario; readonly reason: string }[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n readonly scenario?: EngineConformanceScenario;\n run(): Promise<void>;\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction check(condition: unknown, failure: string): asserts condition {\n if (!condition) throw new Error(failure);\n}\n\nfunction requestFor(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n): AgentRequest {\n return {\n ...fixture.request,\n ...(fixture.request.tools === undefined\n ? {}\n : { tools: [...fixture.request.tools] }),\n ...(fixture.request.allowedTools === undefined\n ? {}\n : { allowedTools: [...fixture.request.allowedTools] }),\n ...(fixture.request.attempt === undefined\n ? {}\n : {\n attempt: {\n ...fixture.request.attempt,\n path: [...fixture.request.attempt.path],\n },\n }),\n ...(fixture.request.env === undefined\n ? {}\n : { env: { ...fixture.request.env } }),\n ...(scenario === 'read-access'\n ? { tools: [], allowedTools: [], workspaceMode: 'read' as const }\n : {}),\n ...(scenario === 'structured-result'\n ? {\n jsonSchema: {\n type: 'object',\n properties: { answer: { type: 'number' } },\n required: ['answer'],\n additionalProperties: false,\n },\n }\n : {}),\n };\n}\n\nasync function openAndRun(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n): Promise<{ readonly result: AgentResult; readonly events: readonly EngineStreamEvent[] }> {\n const engine = await fixture.open(scenario);\n const events: EngineStreamEvent[] = [];\n const result = validateAgentResult(await engine.run(\n requestFor(fixture, scenario),\n (event) => events.push(event),\n new AbortController().signal,\n ));\n check(\n isDeepStrictEqual(result.requested, fixture.requested),\n 'Result changed the requested engine identity.',\n );\n check(\n isDeepStrictEqual(result.effective, fixture.effective),\n 'Result changed the effective engine identity.',\n );\n return { result, events: Object.freeze(events) };\n}\n\nfunction usageEvents(events: readonly EngineStreamEvent[]): EngineStreamEvent[] {\n return events.filter((event) => event.type === 'usage');\n}\n\nasync function expectFailure(\n fixture: EngineConformanceFixture,\n scenario: EngineConformanceScenario,\n expected: EngineFailureKind,\n): Promise<void> {\n let error: unknown;\n try {\n const engine = await fixture.open(scenario);\n await engine.run(\n requestFor(fixture, scenario),\n () => {},\n new AbortController().signal,\n );\n } catch (caught) {\n error = caught;\n }\n check(error !== undefined, `${scenario} completed instead of failing.`);\n const actual = classifyEngineFailure(error);\n check(\n actual === expected,\n `${scenario} classified as ${actual} instead of ${expected}.`,\n );\n}\n\nfunction withDeadline<Value>(\n promise: Promise<Value>,\n milliseconds: number,\n): Promise<Value> {\n return new Promise<Value>((resolve, reject) => {\n const timer = setTimeout(\n () => reject(new Error('Engine did not settle after cancellation.')),\n milliseconds,\n );\n timer.unref?.();\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\n/** Run framework-free behavioral checks against an outside Engine adapter. */\nexport async function runEngineConformance(\n fixture: EngineConformanceFixture,\n): Promise<EngineAdapterConformanceReport> {\n check(\n typeof fixture === 'object'\n && fixture !== null\n && typeof fixture.open === 'function',\n 'Engine conformance fixture must provide open().',\n );\n check(\n typeof fixture.request?.prompt === 'string'\n && fixture.request.prompt.length > 0,\n 'Engine conformance request must have a prompt.',\n );\n\n const cases: readonly ConformanceCase[] = [\n ...(fixture.identityFromModel === true\n ? [{\n name: 'identity follows the model it was given',\n scenario: 'ordered-parts' as const,\n async run() {\n const { result } = await openAndRun(fixture, 'ordered-parts');\n const reported = result.effective;\n check(typeof reported.model === 'string' && reported.model.length > 0,\n 'Engine reported no model to derive an identity from.');\n const derived = modelIdentity(reported.model);\n check(reported.modelFamily === derived.modelFamily,\n `Engine reported family ${String(reported.modelFamily)} for model ${reported.model}; the shared derivation reads ${derived.modelFamily}.`);\n check(derived.provider === undefined || reported.provider === derived.provider,\n `Engine reported provider ${String(reported.provider)} for model ${reported.model}; the shared derivation reads ${derived.provider}.`);\n },\n } satisfies ConformanceCase]\n : []),\n {\n name: 'ordered result parts',\n scenario: 'ordered-parts',\n async run() {\n const { result, events } = await openAndRun(fixture, 'ordered-parts');\n check(\n isDeepStrictEqual(result.parts, [\n { kind: 'assistant', text: 'draft', final: false },\n { kind: 'assistant', text: 'answer', final: true },\n ]),\n 'Engine did not preserve the two ordered assistant parts.',\n );\n check(\n events.filter((event) => event.type === 'text')\n .map((event) => event.delta)\n .join('|') === 'draft|answer',\n 'Engine did not stream ordered text observations.',\n );\n },\n },\n {\n name: 'structured result',\n scenario: 'structured-result',\n async run() {\n const { result } = await openAndRun(fixture, 'structured-result');\n const final = result.parts.find((part) => part.final);\n check(final !== undefined, 'Engine did not return a final result part.');\n const value = final.kind === 'structured'\n ? final.value\n : fixture.parseStructuredResult?.(final, result.parts);\n check(\n isDeepStrictEqual(value, { answer: 42 }),\n 'Engine did not return a usable structured value.',\n );\n },\n },\n {\n name: 'unknown usage remains unknown',\n scenario: 'unknown-usage',\n async run() {\n const { result, events } = await openAndRun(fixture, 'unknown-usage');\n check(result.usage.kind === 'unknown', 'Engine invented a usage receipt.');\n const streamed = usageEvents(events);\n check(\n streamed.length === 1\n && streamed[0]?.type === 'usage'\n && streamed[0].usage.kind === 'unknown',\n 'Engine did not emit exactly one unknown usage observation.',\n );\n },\n },\n {\n name: 'reported usage stays measured',\n scenario: 'reported-usage',\n async run() {\n const { result, events } = await openAndRun(fixture, 'reported-usage');\n check(\n isDeepStrictEqual(result.usage, {\n kind: 'reported',\n inputTokens: 5,\n outputTokens: 3,\n }),\n 'Engine changed the reported token receipt.',\n );\n const streamed = usageEvents(events);\n check(\n streamed.length === 1\n && streamed[0]?.type === 'usage'\n && isDeepStrictEqual(streamed[0].usage, result.usage),\n 'Engine did not emit exactly one matching usage observation.',\n );\n },\n },\n {\n name: 'tool observations stay ordered',\n scenario: 'tool-events',\n async run() {\n const { events } = await openAndRun(fixture, 'tool-events');\n const tools = events.filter(\n (event): event is Extract<EngineStreamEvent, { type: 'tool' }> => event.type === 'tool',\n );\n const expectedTool = fixture.request.tools?.[0];\n check(\n typeof expectedTool === 'string' && expectedTool.length > 0,\n 'Tool conformance requires one declared request tool.',\n );\n // `target` is optional and additive: an engine that names one, and\n // one that does not, are both conforming, so the required shape is\n // compared on its own rather than an exact match on the whole event.\n check(\n tools.every((tool) => tool.target === undefined || typeof tool.target === 'string'),\n 'Engine reported a non-string tool target.',\n );\n check(\n isDeepStrictEqual(\n tools.map(({ type, name, phase }) => ({ type, name, phase })),\n [\n { type: 'tool', name: expectedTool, phase: 'use' },\n { type: 'tool', name: expectedTool, phase: 'result' },\n ],\n ),\n 'Engine lost or reordered visible tool observations.',\n );\n },\n },\n {\n name: 'late final survives transport failure',\n scenario: 'late-final',\n async run() {\n const { result } = await openAndRun(fixture, 'late-final');\n check(\n result.parts.some((part) => part.final),\n 'Late result lost its marked final part.',\n );\n check(\n result.transportFailure !== undefined,\n 'Late result hid the later transport failure.',\n );\n check(\n result.transportFailure.kind === 'unknown',\n 'Engine classified words in completed output as the transport failure.',\n );\n },\n },\n {\n name: 'in-flight cancellation',\n scenario: 'cancellation',\n async run() {\n const controller = new AbortController();\n const engine = await fixture.open('cancellation');\n let sawEvent = false;\n let error: unknown;\n try {\n await withDeadline(engine.run(\n requestFor(fixture, 'cancellation'),\n () => {\n sawEvent = true;\n controller.abort();\n },\n controller.signal,\n ), 3_000);\n } catch (caught) {\n error = caught;\n }\n check(sawEvent, 'Cancellation fixture never began streaming.');\n check(error !== undefined, 'Cancelled engine completed successfully.');\n check(\n classifyEngineFailure(error) === 'aborted',\n `Cancellation classified as ${classifyEngineFailure(error)} instead of aborted.`,\n );\n },\n },\n ...([\n ['missing-cli', 'missing-cli'],\n ['auth', 'auth'],\n ['billing', 'billing'],\n ['model-unavailable', 'model-unavailable'],\n ['rate-limit', 'rate-limit'],\n ['quota', 'quota'],\n ['transient', 'transient'],\n ['timeout', 'timeout'],\n ['invalid-config', 'invalid-config'],\n ] as const).map(([scenario, expected]) => ({\n name: `${scenario} failure classification`,\n scenario,\n run: () => expectFailure(fixture, scenario, expected),\n })),\n {\n name: 'read workspace requires declared tools',\n run: () => expectFailure(fixture, 'read-access', 'invalid-config'),\n },\n ...(['none', 'read', 'write'] as const).map((mode): ConformanceCase => ({\n name: `workspace ${mode}`,\n async run() {\n const probe = fixture.workspace?.modes[mode];\n check(probe !== undefined && typeof fixture.workspace.observe === 'function',\n `Workspace ${mode} requires a process/provider boundary fixture.`);\n check(probe.outcome === 'supported' || probe.outcome === 'refused', 'Invalid workspace outcome.');\n const engine = await fixture.open(`workspace-${mode}`);\n let result: AgentResult | undefined;\n let error: unknown;\n try {\n result = await engine.run({ ...probe.request, workspaceMode: mode }, () => {}, new AbortController().signal);\n } catch (caught) {\n error = caught;\n }\n const observed = await fixture.workspace.observe();\n check(Number.isSafeInteger(observed.modelCalls) && observed.modelCalls >= 0,\n 'Workspace fixture must count actual model calls.');\n if (probe.outcome === 'refused') {\n check(error instanceof EngineError && error.kind === 'invalid-config',\n 'Unsupported workspace mode must return a typed invalid-config failure.');\n check(observed.modelCalls === 0, 'Workspace refusal happened after a model call.');\n return;\n }\n if (error !== undefined) throw error;\n check(result !== undefined, 'Supported workspace mode returned no result.');\n check(observed.modelCalls > 0, 'Supported workspace fixture never reached the model boundary.');\n check(observed.canRead === (mode !== 'none'), `Workspace ${mode} exposed incorrect read access.`);\n check(observed.canWrite === (mode === 'write'), `Workspace ${mode} exposed incorrect write access.`);\n const valid = validateAgentResult(result);\n check(isDeepStrictEqual(valid.requested, probe.requested ?? fixture.requested),\n 'Workspace result changed the requested engine identity or capabilities.');\n check(isDeepStrictEqual(valid.effective, probe.effective ?? fixture.effective),\n 'Workspace result changed the effective engine identity or capabilities.');\n },\n })),\n ];\n\n const failures: EngineConformanceFailure[] = [];\n const unsupported: { case: FeatureScenario; reason: string }[] = [];\n for (const [scenario, reason] of Object.entries(fixture.unsupported ?? {})) {\n check(cases.some((item) => item.scenario === scenario), `Cannot skip mandatory or unknown scenario ${scenario}.`);\n check(typeof reason === 'string' && reason.trim().length > 0, `Unsupported scenario ${scenario} requires a reason.`);\n }\n for (const item of cases) {\n const reason = item.scenario === undefined ? undefined : fixture.unsupported?.[item.scenario as FeatureScenario];\n if (reason !== undefined) {\n unsupported.push({ case: item.scenario as FeatureScenario, reason });\n continue;\n }\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length - unsupported.length,\n failures: Object.freeze(failures.map((item) => Object.freeze(item))),\n unsupported: Object.freeze(unsupported.map((item) => Object.freeze(item))),\n });\n}\n\n/** Throw one readable error when an outside Engine breaks the contract. */\nexport async function assertEngineConformance(\n fixture: EngineConformanceFixture,\n): Promise<void> {\n const report = await runEngineConformance(fixture);\n if (report.ok) return;\n const detail = report.failures\n .map((item) => `${item.case}: ${item.message}`)\n .join('; ');\n throw new Error(`Engine conformance failed: ${detail}`);\n}\n\nexport interface EngineAdmissionConformanceFixture {\n readonly request: AgentRequest;\n readonly selection: EngineSelectionRecord;\n open(): Engine | Promise<Engine>;\n /** No argument counts all model calls; a path/null counts that target. */\n modelCalls(executable?: string | null): number | Promise<number>;\n readonly cli?: {\n /** Move bare-name lookup while keeping the admitted path runnable. */\n moveLookup(): void | Promise<void>;\n /** Same configuration, except an explicitly different absolute path. */\n openDifferent(): Engine | Promise<Engine>;\n /** A syntactically valid absolute path with no executable. */\n openMissing(): Engine | Promise<Engine>;\n };\n}\n\nexport type EngineAdmissionConformanceReport = EngineConformanceReport | {\n readonly kind: 'unsupported';\n readonly adapter: string;\n};\n\nclass AdmissionUnsupportedError extends Error {\n constructor(readonly adapter: string) {\n super(`${adapter} does not implement admit`);\n }\n}\n\n/** Check optional admission without imposing the full run-scenario protocol. */\nexport async function runEngineAdmissionConformance(\n fixture: EngineAdmissionConformanceFixture,\n): Promise<EngineAdmissionConformanceReport> {\n const failures: EngineConformanceFailure[] = [];\n let cases = 0;\n let unsupported: Extract<EngineAdmissionConformanceReport, { kind: 'unsupported' }>\n | undefined;\n\n const report = (): EngineAdmissionConformanceReport => unsupported ?? Object.freeze({\n ok: failures.length === 0,\n cases,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n const runCase = async <Value>(\n name: string,\n action: () => Promise<Value>,\n ): Promise<Value | undefined> => {\n if (unsupported) return;\n cases += 1;\n try {\n return await action();\n } catch (error) {\n if (error instanceof AdmissionUnsupportedError) {\n unsupported = Object.freeze({ kind: 'unsupported', adapter: error.adapter });\n } else {\n failures.push({ case: name, message: message(error) });\n }\n }\n };\n const method = (engine: Engine): NonNullable<Engine['admit']> => {\n if (typeof engine.admit !== 'function') throw new AdmissionUnsupportedError(engine.name);\n return engine.admit.bind(engine);\n };\n const request = (): Omit<AgentRequest, 'prompt'> => {\n const { prompt: _prompt, ...rest } = structuredClone(fixture.request);\n return rest;\n };\n const noModelCall = async <Value>(action: () => Promise<Value>): Promise<Value> => {\n const before = await fixture.modelCalls();\n try {\n return await action();\n } finally {\n check(await fixture.modelCalls() === before, 'Admission or refusal made a model call.');\n }\n };\n const expectFailureKind = async (\n action: () => Promise<unknown>,\n kind: EngineFailureKind,\n ): Promise<void> => {\n let error: unknown;\n try { await action(); } catch (caught) { error = caught; }\n if (error instanceof AdmissionUnsupportedError) throw error;\n check(error instanceof EngineError && error.kind === kind,\n `Expected a typed ${kind} failure, got ${error === undefined ? 'success' : message(error)}.`);\n };\n const signal = (): AbortSignal => new AbortController().signal;\n const runSelected = async (engine: Engine, selected: EngineSelectionRecord): Promise<void> => {\n const total = await fixture.modelCalls();\n const atPath = await fixture.modelCalls(selected.executable);\n const result = validateAgentResult(await engine.run(\n structuredClone(fixture.request), () => {}, signal(),\n ));\n check(isDeepStrictEqual(result.requested, selected), 'Run changed its admitted requested identity.');\n check(isDeepStrictEqual(result.effective, selected), 'Run changed its admitted effective identity.');\n check(await fixture.modelCalls() === total + 1, 'Run did not make exactly one fixture model call.');\n check(await fixture.modelCalls(selected.executable) === atPath + 1,\n 'Run used a different executable from its admitted selection.');\n };\n\n const initial = await runCase('initial admission', async () => {\n const engine = await fixture.open();\n const admit = method(engine);\n const selected = engineSelection(fixture.selection);\n check((selected.executable !== null) === (fixture.cli !== undefined),\n 'CLI selection requires CLI controls; a null executable must not supply them.');\n const admitted = await noModelCall(async () => engineSelection(await admit(request(), signal())));\n check(isDeepStrictEqual(admitted, selected), 'Admission changed the expected selection.');\n return { engine, selection: admitted };\n });\n if (!initial) return report();\n const first = initial.engine;\n const selected = initial.selection;\n\n await runCase('same instance retains selection', async () => {\n await fixture.cli?.moveLookup();\n const again = await noModelCall(async () => engineSelection(\n await method(first)(request(), signal(), selected),\n ));\n check(isDeepStrictEqual(again, selected), 'Re-admission changed the saved selection.');\n await runSelected(first, selected);\n });\n\n await runCase('replacement restores selection', async () => {\n const replacement = await fixture.open();\n const restored = await noModelCall(async () => engineSelection(\n await method(replacement)(request(), signal(), selected),\n ));\n check(isDeepStrictEqual(restored, selected), 'Replacement did not restore the saved selection.');\n await runSelected(replacement, selected);\n });\n\n const changed: ReadonlyArray<readonly [string, EngineSelectionRecord]> = [\n ['adapter', engineSelection({ ...selected, adapter: `${selected.adapter}-different` })],\n ['provider', engineSelection({ ...selected, provider: `${selected.provider ?? ''}-different` })],\n ['family', engineSelection({ ...selected, modelFamily: `${selected.modelFamily ?? ''}-different` })],\n ['model', engineSelection({ ...selected, model: `${selected.model ?? ''}-different` })],\n ['capabilities', engineSelection({\n ...selected, capabilities: selected.capabilities.length === 0 ? ['different'] : [],\n })],\n ['version', engineSelection({ ...selected, adapterVersion: `${selected.adapterVersion ?? ''}-different` })],\n ];\n for (const [field, expected] of changed) {\n await runCase(`changed ${field} is refused`, async () => {\n await noModelCall(async () => expectFailureKind(\n async () => method(first)(request(), signal(), expected), 'invalid-config',\n ));\n });\n }\n\n if (fixture.cli) {\n const cli = fixture.cli;\n await runCase('explicitly swapped path is refused', async () => {\n await noModelCall(async () => {\n const different = await cli.openDifferent();\n const other = engineSelection(await method(different)(request(), signal()));\n check(other.executable !== null && other.executable !== selected.executable,\n 'Different-executable fixture did not select a different path.');\n check(isDeepStrictEqual({ ...other, executable: selected.executable }, selected),\n 'Different-executable fixture also changed non-path identity.');\n const freshDifferent = await cli.openDifferent();\n await expectFailureKind(\n async () => method(freshDifferent)(request(), signal(), selected), 'invalid-config',\n );\n await expectFailureKind(\n async () => method(first)(request(), signal(), other), 'invalid-config',\n );\n });\n });\n await runCase('missing executable fails after construction', async () => {\n await noModelCall(async () => {\n const missing = await cli.openMissing();\n await expectFailureKind(async () => method(missing)(request(), signal()), 'missing-cli');\n await expectFailureKind(async () => missing.run(\n structuredClone(fixture.request), () => {}, signal(),\n ), 'missing-cli');\n const freshMissing = await cli.openMissing();\n method(freshMissing);\n await expectFailureKind(async () => freshMissing.run(\n structuredClone(fixture.request), () => {}, signal(),\n ), 'missing-cli');\n });\n });\n }\n return report();\n}\n","import { isDeepStrictEqual } from 'node:util';\n\nimport type {\n Memory,\n MemoryCommand,\n MemoryErrorCode,\n MemoryLimits,\n MemoryPath,\n MemoryResult,\n MemorySuccess,\n} from './memory-types.js';\n\nexport interface MemoryConformanceOptions {\n readonly scope: string;\n readonly limits?: Partial<MemoryLimits>;\n}\n\nexport type MemoryConformanceFactory = (\n options: MemoryConformanceOptions,\n) => Memory | Promise<Memory>;\n\nexport interface MemoryConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface MemoryConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly MemoryConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(factory: MemoryConformanceFactory, scope: string): Promise<void>;\n}\n\nfunction check(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message);\n}\n\nfunction same(actual: unknown, expected: unknown, message: string): void {\n if (!isDeepStrictEqual(actual, expected)) {\n throw new Error(`${message} Expected ${JSON.stringify(expected)}, received ${JSON.stringify(actual)}.`);\n }\n}\n\nasync function success(\n memory: Memory,\n command: MemoryCommand,\n): Promise<MemorySuccess> {\n const result = await memory.execute(command);\n if (!result.ok) {\n throw new Error(`Expected ${command.command} to succeed, received ${result.error.code}.`);\n }\n return result;\n}\n\nasync function failure(\n memory: Memory,\n command: MemoryCommand,\n code: MemoryErrorCode,\n): Promise<Extract<MemoryResult, { ok: false }>> {\n const result = await memory.execute(command);\n if (result.ok) throw new Error(`Expected ${command.command} to fail with ${code}.`);\n if (result.error.code !== code) {\n throw new Error(`Expected ${code}, received ${result.error.code}.`);\n }\n return result;\n}\n\nconst cases: readonly ConformanceCase[] = [\n {\n name: 'empty root view',\n async run(factory, scope) {\n const result = await success(await factory({ scope }), {\n command: 'view',\n path: '/memories',\n });\n same(result, {\n ok: true,\n command: 'view',\n value: { kind: 'directory', path: '/memories', entries: [] },\n }, 'The empty root view was not stable.');\n },\n },\n {\n name: 'create, overwrite, and ranged view',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const created = await success(memory, {\n command: 'create',\n path: '/memories/notes/plan.md',\n text: 'first\\nsecond\\nthird\\n',\n });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n check(created.value.overwritten === false, 'First create reported an overwrite.');\n\n const viewed = await success(memory, {\n command: 'view',\n path: '/memories/notes/plan.md',\n viewRange: [2, -1],\n });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'File view returned the wrong result.');\n same(viewed.value.lines, { start: 2, end: 3, total: 3 }, 'The line range was wrong.');\n check(viewed.value.text === 'second\\nthird\\n', 'The ranged text was wrong.');\n\n const overwritten = await success(memory, {\n command: 'create',\n path: '/memories/notes/plan.md',\n text: 'new',\n });\n check(overwritten.command === 'create' && overwritten.value.overwritten, 'Create did not overwrite.');\n },\n },\n {\n name: 'sorted immediate directory entries',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/z.md', text: 'z' });\n await success(memory, { command: 'create', path: '/memories/a/file.txt', text: 'a' });\n await success(memory, { command: 'create', path: '/memories/b.json', text: '{}' });\n const viewed = await success(memory, { command: 'view', path: '/memories' });\n check(viewed.command === 'view' && viewed.value.kind === 'directory', 'Root was not a directory.');\n same(viewed.value.entries, [\n { name: 'a', path: '/memories/a', kind: 'directory' },\n { name: 'b.json', path: '/memories/b.json', kind: 'file' },\n { name: 'z.md', path: '/memories/z.md', kind: 'file' },\n ], 'Directory entries were not immediate and sorted.');\n },\n },\n {\n name: 'unique string replacement',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'one two' });\n await success(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'one',\n newText: 'three',\n });\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'missing',\n newText: 'x',\n }, 'MATCH_NOT_FOUND');\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'x x' });\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: 'x',\n newText: 'y',\n }, 'MATCH_NOT_UNIQUE');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/a.md',\n oldText: '',\n newText: 'y',\n }, 'INVALID_ARGUMENT');\n },\n },\n {\n name: 'consistent ranged view and zero-based insertion lines',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const original = 'a\\r\\nc\\rd\\r\\n';\n await success(memory, { command: 'create', path: '/memories/a.md', text: original });\n\n const fullView = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(fullView.command === 'view' && fullView.value.kind === 'file', 'Full file could not be viewed.');\n check(fullView.value.text === original, 'A full view changed the stored line endings.');\n\n const rangedView = await success(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [2, 2],\n });\n check(rangedView.command === 'view' && rangedView.value.kind === 'file', 'Line range could not be viewed.');\n same(rangedView.value.lines, { start: 2, end: 2, total: 3 }, 'The ranged view used different line numbers from insert.');\n check(rangedView.value.text === 'c\\n', 'The ranged view did not return the selected logical line.');\n\n await success(memory, {\n command: 'insert',\n path: '/memories/a.md',\n insertLine: 2,\n text: 'b',\n });\n const viewed = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'Inserted file could not be viewed.');\n check(viewed.value.text === 'a\\nc\\nb\\nd\\n', 'Insert did not use the ranged view line numbers.');\n await failure(memory, {\n command: 'insert',\n path: '/memories/a.md',\n insertLine: 5,\n text: 'e',\n }, 'INVALID_RANGE');\n },\n },\n {\n name: 'recursive delete and protected root',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a/one.md', text: '1' });\n await success(memory, { command: 'create', path: '/memories/a/two.md', text: '22' });\n const deleted = await success(memory, { command: 'delete', path: '/memories/a' });\n same(deleted, {\n ok: true,\n command: 'delete',\n value: {\n path: '/memories/a',\n kind: 'directory',\n deletedFiles: 2,\n freedBytes: 3,\n },\n }, 'Directory deletion returned the wrong receipt.');\n await failure(memory, { command: 'delete', path: '/memories' }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'file and directory rename without overwrite',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a/one.md', text: '1' });\n const renamed = await success(memory, {\n command: 'rename',\n oldPath: '/memories/a',\n newPath: '/memories/b',\n });\n check(renamed.command === 'rename' && renamed.value.kind === 'directory', 'Directory rename failed.');\n check(renamed.value.movedFiles === 1, 'Directory rename moved the wrong file count.');\n await success(memory, { command: 'create', path: '/memories/c.md', text: 'c' });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/b/one.md',\n newPath: '/memories/c.md',\n }, 'ALREADY_EXISTS');\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories',\n newPath: '/memories/root',\n }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'path and extension safety',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await failure(memory, {\n command: 'create',\n path: '/memories/../escape.md',\n text: 'x',\n }, 'INVALID_PATH');\n await failure(memory, {\n command: 'create',\n path: '/memories/a%2Fescape.md',\n text: 'x',\n }, 'INVALID_PATH');\n await failure(memory, {\n command: 'create',\n path: '/memories/code.ts',\n text: 'x',\n }, 'INVALID_EXTENSION');\n await success(memory, {\n command: 'create',\n path: '/memories/note.md',\n text: 'x',\n });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/note.md',\n newPath: '/memories/code.ts',\n }, 'INVALID_EXTENSION');\n await failure(memory, {\n command: 'create',\n path: '/memories',\n text: 'x',\n }, 'ROOT_PROTECTED');\n },\n },\n {\n name: 'path conflict safety',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/file.md', text: 'x' });\n await failure(memory, {\n command: 'create',\n path: '/memories/file.md/child.txt',\n text: 'y',\n }, 'PATH_CONFLICT');\n await success(memory, { command: 'create', path: '/memories/dir/child.md', text: 'y' });\n await failure(memory, {\n command: 'create',\n path: '/memories/dir',\n text: 'z',\n }, 'INVALID_EXTENSION');\n },\n },\n {\n name: 'invalid line ranges',\n async run(factory, scope) {\n const memory = await factory({ scope });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'one\\ntwo' });\n await failure(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [0, 1],\n }, 'INVALID_RANGE');\n await failure(memory, {\n command: 'view',\n path: '/memories/a.md',\n viewRange: [1, 3],\n }, 'INVALID_RANGE');\n },\n },\n {\n name: 'deterministic least-recently-written eviction',\n async run(factory, scope) {\n const memory = await factory({ scope, limits: { maxFiles: 2 } });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(memory, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(memory, { command: 'view', path: '/memories/a.md' });\n const created = await success(memory, { command: 'create', path: '/memories/c.md', text: 'c' });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n same(created.value.evicted, ['/memories/a.md'], 'View changed eviction recency.');\n await failure(memory, { command: 'view', path: '/memories/a.md' }, 'NOT_FOUND');\n\n const overwritten = await factory({ scope: `${scope}-overwrite`, limits: { maxFiles: 2 } });\n await success(overwritten, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(overwritten, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(overwritten, { command: 'create', path: '/memories/a.md', text: 'new' });\n const afterOverwrite = await success(overwritten, {\n command: 'create',\n path: '/memories/c.md',\n text: 'c',\n });\n check(afterOverwrite.command === 'create', 'Create returned the wrong receipt.');\n same(afterOverwrite.value.evicted, ['/memories/b.md'], 'Overwrite did not refresh write recency.');\n\n const renamed = await factory({ scope: `${scope}-rename`, limits: { maxFiles: 2 } });\n await success(renamed, { command: 'create', path: '/memories/a.md', text: 'a' });\n await success(renamed, { command: 'create', path: '/memories/b.md', text: 'b' });\n await success(renamed, {\n command: 'rename',\n oldPath: '/memories/a.md',\n newPath: '/memories/renamed.md',\n });\n const afterRename = await success(renamed, {\n command: 'create',\n path: '/memories/c.md',\n text: 'c',\n });\n check(afterRename.command === 'create', 'Create returned the wrong receipt.');\n same(afterRename.value.evicted, ['/memories/renamed.md'], 'Rename changed write recency.');\n },\n },\n {\n name: 'total-byte eviction',\n async run(factory, scope) {\n const memory = await factory({\n scope,\n limits: { maxFileBytes: 4, maxTotalBytes: 4, maxFiles: 3 },\n });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'aa' });\n await success(memory, { command: 'create', path: '/memories/b.md', text: 'bb' });\n const created = await success(memory, { command: 'create', path: '/memories/c.md', text: 'cc' });\n check(created.command === 'create', 'Create returned the wrong receipt.');\n same(created.value.evicted, ['/memories/a.md'], 'Total-byte eviction chose the wrong file.');\n },\n },\n {\n name: 'limit failure is atomic and never evicts the target',\n async run(factory, scope) {\n const memory = await factory({\n scope,\n limits: { maxFileBytes: 4, maxTotalBytes: 4, maxFiles: 1 },\n });\n await success(memory, { command: 'create', path: '/memories/a.md', text: 'safe' });\n await failure(memory, { command: 'create', path: '/memories/b.md', text: 'large' }, 'LIMIT_EXCEEDED');\n const viewed = await success(memory, { command: 'view', path: '/memories/a.md' });\n check(viewed.command === 'view' && viewed.value.kind === 'file', 'Atomic failure removed the old file.');\n check(viewed.value.text === 'safe', 'Atomic failure changed the old file.');\n },\n },\n {\n name: 'scope isolation',\n async run(factory, scope) {\n const first = await factory({ scope: `${scope}-first` });\n const second = await factory({ scope: `${scope}-second` });\n await success(first, { command: 'create', path: '/memories/a.md', text: 'private' });\n await failure(second, { command: 'view', path: '/memories/a.md' }, 'NOT_FOUND');\n },\n },\n {\n name: 'rename validates every moved path atomically',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const segment = 's'.repeat(128);\n const fileName = `${'f'.repeat(125)}.md`;\n const sourcePath = `/memories/a/${[segment, segment, segment, segment, segment, segment, fileName].join('/')}` as MemoryPath;\n const destination = `/memories/${'b'.repeat(128)}` as MemoryPath;\n await success(memory, { command: 'create', path: sourcePath, text: 'safe' });\n await failure(memory, {\n command: 'rename',\n oldPath: '/memories/a',\n newPath: destination,\n }, 'INVALID_PATH');\n await success(memory, { command: 'view', path: sourcePath });\n },\n },\n {\n name: 'UTF-8 byte limits',\n async run(factory, scope) {\n const memory = await factory({ scope, limits: { maxFileBytes: 4 } });\n const created = await success(memory, { command: 'create', path: '/memories/a.md', text: '££' });\n check(created.command === 'create' && created.value.byteLength === 4, 'Byte length was not UTF-8.');\n await failure(memory, { command: 'create', path: '/memories/b.md', text: '£££' }, 'LIMIT_EXCEEDED');\n\n const emoji = await success(memory, {\n command: 'create',\n path: '/memories/emoji.md',\n text: '🧠',\n });\n check(emoji.command === 'create' && emoji.value.byteLength === 4, 'A valid surrogate pair was rejected.');\n await failure(memory, {\n command: 'create',\n path: '/memories/high.md',\n text: '\\uD800',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/emoji.md',\n oldText: '\\uDC00',\n newText: 'x',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'str_replace',\n path: '/memories/emoji.md',\n oldText: '🧠',\n newText: '\\uD800',\n }, 'INVALID_ARGUMENT');\n await failure(memory, {\n command: 'insert',\n path: '/memories/emoji.md',\n insertLine: 0,\n text: '\\uDC00',\n }, 'INVALID_ARGUMENT');\n },\n },\n {\n name: 'invalid command and argument errors',\n async run(factory, scope) {\n const memory = await factory({ scope });\n const invalidCommand = await memory.execute({ command: 'write' } as unknown as MemoryCommand);\n check(!invalidCommand.ok, 'An unknown command succeeded.');\n check(invalidCommand.command === 'write', 'The failure did not retain the supplied command.');\n check(invalidCommand.error.code === 'INVALID_COMMAND', 'An unknown command returned the wrong code.');\n\n const invalidPath = await memory.execute({ command: 'view' } as unknown as MemoryCommand);\n check(!invalidPath.ok && invalidPath.error.code === 'INVALID_ARGUMENT', 'A missing path returned the wrong code.');\n },\n },\n];\n\nexport async function runMemoryConformance(\n factory: MemoryConformanceFactory,\n): Promise<MemoryConformanceReport> {\n const failures: MemoryConformanceFailure[] = [];\n\n for (const [index, testCase] of cases.entries()) {\n try {\n await testCase.run(factory, `memory-conformance-${index + 1}`);\n } catch (error) {\n failures.push({\n case: testCase.name,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return {\n ok: failures.length === 0,\n cases: cases.length,\n failures,\n };\n}\n\nexport async function assertMemoryConformance(\n factory: MemoryConformanceFactory,\n): Promise<void> {\n const report = await runMemoryConformance(factory);\n if (report.ok) return;\n\n const details = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('\\n');\n throw new Error(`Memory adapter failed ${report.failures.length} conformance case(s).\\n${details}`);\n}\n","import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { StorageError, type StorageErrorCode } from '../storage/error.js';\nimport type {\n DomainEventEnvelope,\n EventStreamRef,\n NewDomainEvent,\n} from './envelope.js';\nimport type { DomainEventBatch, EventStore } from './store.js';\n\nexport interface EventStoreConformanceOptions {\n readonly maxEventPayloadBytes: number;\n readonly maxAppendBatchBytes: number;\n readonly knownSecrets: readonly string[];\n}\n\nexport type EventStoreConformanceFactory = (\n options: EventStoreConformanceOptions,\n) => EventStore | Promise<EventStore>;\n\ninterface EventStoreConformanceFixture {\n readonly maxEventPayloadBytes: number;\n readonly maxAppendBatchBytes: number;\n readonly knownSecret: string;\n open(): EventStore | Promise<EventStore>;\n}\n\nexport interface EventStoreConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface EventStoreConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly EventStoreConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(): Promise<void>;\n}\n\nconst DEFAULT_OPTIONS: EventStoreConformanceOptions = {\n maxEventPayloadBytes: 1_024,\n maxAppendBatchBytes: 8_192,\n knownSecrets: ['conformance-secret'],\n};\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction assert(condition: unknown, failure: string): asserts condition {\n if (!condition) throw new Error(failure);\n}\n\nasync function collect(\n values: AsyncIterable<DomainEventEnvelope>,\n): Promise<readonly DomainEventEnvelope[]> {\n const result: DomainEventEnvelope[] = [];\n for await (const value of values) result.push(value);\n return result;\n}\n\nasync function expectStorageError(\n action: () => Promise<unknown>,\n code: StorageErrorCode,\n): Promise<void> {\n try {\n await action();\n } catch (error) {\n if (error instanceof StorageError && error.code === code) return;\n throw new Error(\n `Expected StorageError ${code}, received ${message(error)}.`,\n );\n }\n throw new Error(`Expected StorageError ${code}, but the operation succeeded.`);\n}\n\nfunction conformanceId(prefix: string): string {\n return `${prefix}-${randomUUID().replaceAll('-', '')}`;\n}\n\nfunction stream(prefix: string): EventStreamRef {\n return {\n namespace: conformanceId('namespace'),\n streamId: conformanceId(prefix),\n };\n}\n\nfunction event(\n eventId: string,\n payload: NewDomainEvent['payload'] = {},\n): NewDomainEvent {\n return {\n eventId,\n type: 'conformance:recorded',\n version: 1,\n timestamp: '2026-08-26T04:00:00.000Z',\n correlationId: 'conformance-run',\n causationId: null,\n payload,\n };\n}\n\nfunction batchPastLimit(maximumBytes: number): DomainEventBatch {\n const events: NewDomainEvent[] = [];\n let bytes = 0;\n while (bytes <= maximumBytes) {\n const next = event(`batch-${events.length}`, { text: 'x' });\n events.push(next);\n const envelope = {\n ...next,\n envelopeVersion: 1,\n streamId: 'batch-limit',\n revision: events.length,\n };\n bytes += Buffer.byteLength(`${JSON.stringify(envelope)}\\n`, 'utf8');\n }\n return events as unknown as DomainEventBatch;\n}\n\nfunction validateFixture(fixture: EventStoreConformanceFixture): void {\n for (const [name, value] of [\n ['maxEventPayloadBytes', fixture.maxEventPayloadBytes],\n ['maxAppendBatchBytes', fixture.maxAppendBatchBytes],\n ] as const) {\n if (!Number.isSafeInteger(value) || value < 64 || value > 1_000_000) {\n throw new Error(`${name} must be a safe integer from 64 through 1000000 for conformance.`);\n }\n }\n if (\n typeof fixture.knownSecret !== 'string'\n || fixture.knownSecret.length === 0\n ) {\n throw new Error('knownSecret must be a non-empty configured secret.');\n }\n}\n\n/** Run framework-free checks against an outside EventStore implementation. */\nexport async function runEventStoreConformance(\n factory: EventStoreConformanceFactory,\n): Promise<EventStoreConformanceReport> {\n const fixture: EventStoreConformanceFixture = {\n maxEventPayloadBytes: DEFAULT_OPTIONS.maxEventPayloadBytes,\n maxAppendBatchBytes: DEFAULT_OPTIONS.maxAppendBatchBytes,\n knownSecret: DEFAULT_OPTIONS.knownSecrets[0]!,\n open: () => factory(DEFAULT_OPTIONS),\n };\n validateFixture(fixture);\n const cases: readonly ConformanceCase[] = [\n {\n name: 'side-effect-free preflight',\n async run() {\n const target = stream('preflight');\n const store = await fixture.open();\n const candidate = event(conformanceId('event'));\n await store.preflightAppend(target, 0, [candidate]);\n assert(\n (await collect(store.read(target))).length === 0,\n 'Preflight made an event visible.',\n );\n const revision = await store.append(target, 0, [candidate]);\n assert(revision === 1, 'Preflight changed the later append revision.');\n },\n },\n {\n name: 'ordered durable append',\n async run() {\n const target = stream('ordered');\n const first = await fixture.open();\n const source = event(conformanceId('event'), {\n extension: { preserved: true },\n });\n const second = event(conformanceId('event'));\n const firstId = source.eventId;\n const secondId = second.eventId;\n const revision = await first.append(target, 0, [source, second]);\n assert(revision === 2, `Append returned revision ${revision} instead of 2.`);\n\n (source.payload as { extension: { preserved: boolean } })\n .extension.preserved = false;\n const reopened = await fixture.open();\n const all = await collect(reopened.read(target));\n assert(all.length === 2, `Reopened stream returned ${all.length} events instead of 2.`);\n assert(\n all[0]?.eventId === firstId\n && all[0].revision === 1\n && all[1]?.eventId === secondId\n && all[1].revision === 2,\n 'Reopened stream changed event order or assigned revisions.',\n );\n assert(\n isDeepStrictEqual(all[0]?.payload, {\n extension: { preserved: true },\n }),\n 'Stored event changed caller-owned or graph-owned payload data.',\n );\n const after = await collect(reopened.read(target, 1));\n assert(\n after.length === 1 && after[0]?.eventId === secondId,\n 'Exclusive afterRevision read returned the wrong events.',\n );\n },\n },\n {\n name: 'exact append retry',\n async run() {\n const target = stream('retry');\n const source = event(conformanceId('event'), { value: 'same' });\n const first = await fixture.open();\n await first.append(target, 0, [source]);\n\n const reopened = await fixture.open();\n const revision = await reopened.append(target, 0, [source]);\n assert(\n revision === 1,\n `Exact append retry returned revision ${revision} instead of 1.`,\n );\n assert(\n (await collect(reopened.read(target))).length === 1,\n 'Exact append retry committed the event twice.',\n );\n await expectStorageError(\n () => reopened.append(target, 0, [event(source.eventId, {\n value: 'changed',\n })]),\n 'REVISION_CONFLICT',\n );\n },\n },\n {\n name: 'restart policy identity',\n async run() {\n const target = stream('policy');\n const first = await fixture.open();\n const recorded = event(conformanceId('event'));\n await first.append(target, 0, [recorded]);\n\n const rotatedSecrets = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: ['replacement-conformance-secret'],\n });\n assert(\n (await collect(rotatedSecrets.read(target)))[0]?.eventId\n === recorded.eventId,\n 'Changing live secret screening made committed events unreadable.',\n );\n\n const changedLimits = await factory({\n ...DEFAULT_OPTIONS,\n maxEventPayloadBytes: DEFAULT_OPTIONS.maxEventPayloadBytes + 1,\n });\n await expectStorageError(\n () => collect(changedLimits.read(target)),\n 'INVALID_STORED_VALUE',\n );\n },\n },\n {\n name: 'atomic expected revision',\n async run() {\n const target = stream('concurrent');\n const left = await fixture.open();\n const right = await fixture.open();\n const results = await Promise.allSettled([\n left.append(target, 0, [event(conformanceId('event'))]),\n right.append(target, 0, [event(conformanceId('event'))]),\n ]);\n assert(\n results.filter((result) => result.status === 'fulfilled').length === 1,\n 'Two writers committed the same expected revision.',\n );\n const rejected = results.find((result) => result.status === 'rejected');\n assert(\n rejected?.status === 'rejected'\n && rejected.reason instanceof StorageError\n && rejected.reason.code === 'REVISION_CONFLICT',\n 'Losing writer did not receive REVISION_CONFLICT.',\n );\n assert(\n (await collect((await fixture.open()).read(target))).length === 1,\n 'Concurrent append exposed a partial or duplicate batch.',\n );\n },\n },\n {\n name: 'duplicate event identity',\n async run() {\n const target = stream('duplicate');\n const store = await fixture.open();\n const duplicate = event(conformanceId('event'));\n await store.append(target, 0, [duplicate]);\n await expectStorageError(\n () => store.append(target, 1, [duplicate]),\n 'DUPLICATE_EVENT_ID',\n );\n assert(\n (await collect(store.read(target))).length === 1,\n 'Rejected duplicate append changed the stream.',\n );\n },\n },\n {\n name: 'namespace isolation',\n async run() {\n const streamId = conformanceId('shared-stream');\n const left = { namespace: conformanceId('left'), streamId };\n const right = { namespace: conformanceId('right'), streamId };\n const store = await fixture.open();\n const leftEvent = event(conformanceId('left-event'));\n const rightEvent = event(conformanceId('right-event'));\n await store.append(left, 0, [leftEvent]);\n await store.append(right, 0, [rightEvent]);\n assert(\n (await collect(store.read(left)))[0]?.eventId === leftEvent.eventId\n && (await collect(store.read(right)))[0]?.eventId === rightEvent.eventId,\n 'Equal stream ids in separate namespaces collided.',\n );\n },\n },\n {\n name: 'bounded append',\n async run() {\n const store = await fixture.open();\n const payloadTarget = stream('payload-limit');\n await expectStorageError(\n () => store.append(payloadTarget, 0, [event(\n conformanceId('event'),\n { text: 'x'.repeat(fixture.maxEventPayloadBytes) },\n )]),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n const batchTarget = stream('batch-limit');\n await expectStorageError(\n () => store.append(\n batchTarget,\n 0,\n batchPastLimit(fixture.maxAppendBatchBytes),\n ),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n assert(\n (await collect(store.read(payloadTarget))).length === 0\n && (await collect(store.read(batchTarget))).length === 0,\n 'Rejected oversized append changed a stream.',\n );\n },\n },\n {\n name: 'known-secret rejection',\n async run() {\n const target = stream('known-secret');\n const store = await fixture.open();\n const secretEvent = event(\n conformanceId('event'),\n { text: `before ${fixture.knownSecret} after` },\n );\n await expectStorageError(\n () => store.preflightAppend(target, 0, [secretEvent]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n () => store.append(target, 0, [secretEvent]),\n 'KNOWN_SECRET',\n );\n assert(\n (await collect(store.read(target))).length === 0,\n 'Known-secret rejection persisted an event.',\n );\n },\n },\n {\n name: 'semantic known-secret rejection',\n async run() {\n const target = stream('semantic-known-secret');\n const options = {\n ...DEFAULT_OPTIONS,\n knownSecrets: ['line\\nbreak'],\n };\n const store = await factory(options);\n const secretEvent = event(\n conformanceId('event'),\n { text: 'before line\\nbreak after' },\n );\n const failures: string[] = [];\n for (const operation of [\n () => store.preflightAppend(target, 0, [secretEvent]),\n () => store.append(target, 0, [secretEvent]),\n ]) {\n try {\n await expectStorageError(operation, 'KNOWN_SECRET');\n } catch (error) {\n failures.push(message(error));\n }\n }\n const reopened = await factory(options);\n if ((await collect(reopened.read(target))).length !== 0) {\n failures.push('Escaped known-secret rejection persisted an event.');\n }\n assert(failures.length === 0, failures.join(' '));\n },\n },\n ];\n\n const failures: EventStoreConformanceFailure[] = [];\n for (const item of cases) {\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n}\n\n/** Throw one readable error when an outside EventStore breaks the contract. */\nexport async function assertEventStoreConformance(\n factory: EventStoreConformanceFactory,\n): Promise<void> {\n const report = await runEventStoreConformance(factory);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Event store conformance failed: ${detail}`);\n}\n","import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { StorageError } from '../storage/error.js';\nimport type {\n ArtifactBatch,\n ArtifactReference,\n ArtifactScope,\n ArtifactStore,\n} from './store.js';\n\nexport interface ArtifactStoreConformanceOptions {\n readonly maxArtifactBytes: number;\n readonly maxTotalArtifactBytesPerRun: number;\n readonly knownSecrets: readonly string[];\n}\n\nexport type ArtifactStoreConformanceFactory = (\n options: ArtifactStoreConformanceOptions,\n) => ArtifactStore | Promise<ArtifactStore>;\n\nexport interface ArtifactStoreConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface ArtifactStoreConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly ArtifactStoreConformanceFailure[];\n}\n\ninterface ConformanceCase {\n readonly name: string;\n run(factory: ArtifactStoreConformanceFactory, scope: ConformanceScope): Promise<void>;\n}\n\ntype ConformanceScope = (name: string) => ArtifactScope;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst HELLO_DIGEST =\n 'sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824';\nconst DEFAULT_OPTIONS: ArtifactStoreConformanceOptions = {\n maxArtifactBytes: 64,\n maxTotalArtifactBytesPerRun: 128,\n knownSecrets: ['known-secret-value'],\n};\n\nfunction artifact(text: string, purpose = 'proof') {\n return {\n bytes: encoder.encode(text),\n mediaType: 'text/plain',\n purpose,\n contentMode: 'exact' as const,\n };\n}\n\nfunction check(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message);\n}\n\nasync function expectStorageError(\n operation: Promise<unknown>,\n code: StorageError['code'],\n): Promise<void> {\n try {\n await operation;\n } catch (error) {\n if (error instanceof StorageError && error.code === code) return;\n throw new Error(\n `Expected ${code}, received ${error instanceof Error ? error.message : String(error)}.`,\n );\n }\n throw new Error(`Expected ${code}, but the operation succeeded.`);\n}\n\nconst cases: readonly ConformanceCase[] = [\n {\n name: 'content address and detached read',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('content');\n await expectStorageError(\n store.preflightWrite(location, [] as unknown as ArtifactBatch),\n 'INVALID_STORED_VALUE',\n );\n const [predicted] = await store.preflightWrite(location, [artifact('hello')]);\n check(predicted !== undefined, 'Preflight did not predict a reference.');\n await expectStorageError(store.read(location, predicted), 'ARTIFACT_NOT_ADMITTED');\n const reference = await store.write(location, artifact('hello'));\n check(isDeepStrictEqual(reference, predicted), 'Write did not issue its predicted reference.');\n check(isDeepStrictEqual(reference, {\n schemaVersion: 1,\n digest: HELLO_DIGEST,\n byteLength: 5,\n mediaType: 'text/plain',\n purpose: 'proof',\n }), `Reference was ${JSON.stringify(reference)}.`);\n const first = await store.read(location, reference);\n first[0] = 0;\n const second = await store.read(location, reference);\n check(decoder.decode(second) === 'hello', 'A caller changed stored bytes through a read result.');\n },\n },\n {\n name: 'fresh-provider durable read',\n async run(factory, scope) {\n const location = scope('durable');\n const writer = await factory(DEFAULT_OPTIONS);\n const reference = await writer.write(location, artifact('durable'));\n const reader = await factory(DEFAULT_OPTIONS);\n const saved = await reader.read(location, reference);\n check(decoder.decode(saved) === 'durable', 'A fresh provider could not read admitted bytes.');\n },\n },\n {\n name: 'restart policy identity',\n async run(factory, scope) {\n const location = scope('policy');\n const writer = await factory(DEFAULT_OPTIONS);\n const reference = await writer.write(location, artifact('durable'));\n\n const rotatedSecrets = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: ['replacement-secret-value'],\n });\n check(\n decoder.decode(await rotatedSecrets.read(location, reference)) === 'durable',\n 'Changing live secret screening made admitted bytes unreadable.',\n );\n\n const changedLimits = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: DEFAULT_OPTIONS.maxArtifactBytes + 1,\n });\n await expectStorageError(\n changedLimits.read(location, reference),\n 'INVALID_STORED_VALUE',\n );\n },\n },\n {\n name: 'forged exact receipt rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('forged-receipt');\n const reference = await store.write(location, artifact('private'));\n await expectStorageError(store.read(location, {\n ...reference,\n purpose: 'forged-purpose',\n }), 'ARTIFACT_NOT_ADMITTED');\n },\n },\n {\n name: 'two-provider final-capacity race',\n async run(factory, scope) {\n const options = {\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 5,\n };\n const first = await factory(options);\n const second = await factory(options);\n const location = scope('final-capacity-race');\n const results = await Promise.allSettled([\n first.write(location, artifact('aaa')),\n second.write(location, artifact('bbb')),\n ]);\n check(\n results.filter((result) => result.status === 'fulfilled').length === 1,\n 'Two providers did not admit exactly one final-capacity artifact.',\n );\n const rejected = results.find((result) => result.status === 'rejected');\n check(\n rejected?.status === 'rejected'\n && rejected.reason instanceof StorageError\n && rejected.reason.code === 'STORAGE_LIMIT_EXCEEDED',\n 'The losing provider did not report the run storage limit.',\n );\n },\n },\n {\n name: 'one-byte address change',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('address');\n const first = await store.write(location, artifact('hello'));\n const second = await store.write(location, artifact('hellp'));\n check(first.digest !== second.digest, 'Different bytes returned the same digest.');\n },\n },\n {\n name: 'namespace isolation',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const reference = await store.write(scope('namespace-a'), artifact('private'));\n await expectStorageError(\n store.read(scope('namespace-b'), reference),\n 'ARTIFACT_NOT_ADMITTED',\n );\n },\n },\n {\n name: 'run isolation',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('run');\n const reference = await store.write(location, artifact('private'));\n await expectStorageError(\n store.read({ ...location, runId: 'run-two' }, reference),\n 'ARTIFACT_NOT_ADMITTED',\n );\n },\n },\n {\n name: 'marked sensitive rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n await expectStorageError(\n store.write(scope('sensitive'), { ...artifact('private'), sensitive: true }),\n 'SENSITIVE_CONTENT',\n );\n },\n },\n {\n name: 'known secret rejection',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n await expectStorageError(\n store.write(scope('secret'), artifact('token=known-secret-value')),\n 'KNOWN_SECRET',\n );\n },\n },\n {\n name: 'semantic secret rejection',\n async run(factory, scope) {\n const metadataSecret = 'quote\"token';\n const stateSecret = 'line\\nbreak';\n const store = await factory({\n ...DEFAULT_OPTIONS,\n knownSecrets: [metadataSecret, stateSecret],\n });\n const metadataArtifact = artifact('safe', metadataSecret);\n await expectStorageError(\n store.preflightWrite(scope('secret-metadata'), [metadataArtifact]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n store.write(scope('secret-metadata'), metadataArtifact),\n 'KNOWN_SECRET',\n );\n\n const stateArtifact = {\n bytes: encoder.encode(JSON.stringify({ token: stateSecret })),\n mediaType: 'application/problem+json',\n purpose: 'state',\n contentMode: 'state' as const,\n };\n await expectStorageError(\n store.preflightWrite(scope('secret-state'), [stateArtifact]),\n 'KNOWN_SECRET',\n );\n await expectStorageError(\n store.write(scope('secret-state'), stateArtifact),\n 'KNOWN_SECRET',\n );\n },\n },\n {\n name: 'free-text redaction before receipt',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('redaction');\n const reference = await store.write(location, {\n ...artifact('token=known-secret-value'),\n contentMode: 'free-text',\n });\n const saved = await store.read(location, reference);\n check(decoder.decode(saved) === 'token=[redacted]', 'Known secret was not redacted.');\n check(reference.byteLength === 16, 'Receipt size was not calculated after redaction.');\n },\n },\n {\n name: 'single-artifact limit',\n async run(factory, scope) {\n const store = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 8,\n });\n await expectStorageError(\n store.write(scope('item-limit'), artifact('123456')),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n },\n },\n {\n name: 'unique-digest run quota',\n async run(factory, scope) {\n const store = await factory({\n ...DEFAULT_OPTIONS,\n maxArtifactBytes: 5,\n maxTotalArtifactBytesPerRun: 5,\n });\n const location = scope('run-limit');\n await expectStorageError(store.preflightWrite(location, [\n artifact('aaa'),\n artifact('bbb'),\n ]), 'STORAGE_LIMIT_EXCEEDED');\n const first = await store.write(location, artifact('12345'));\n const duplicate = await store.write(location, artifact('12345', 'second-use'));\n check(first.digest === duplicate.digest, 'Duplicate content changed its digest.');\n await expectStorageError(\n store.write(location, artifact('x')),\n 'STORAGE_LIMIT_EXCEEDED',\n );\n },\n },\n {\n name: 'run deletion',\n async run(factory, scope) {\n const store = await factory(DEFAULT_OPTIONS);\n const location = scope('delete');\n const reference = await store.write(location, artifact('hello'));\n await store.deleteRun(location);\n await expectStorageError(store.read(location, reference), 'ARTIFACT_NOT_ADMITTED');\n },\n },\n];\n\n/** Run the framework-free behavioral checks for an ArtifactStore provider. */\nexport async function runArtifactStoreConformance(\n factory: ArtifactStoreConformanceFactory,\n): Promise<ArtifactStoreConformanceReport> {\n const invocation = randomUUID();\n const scope: ConformanceScope = (name) => ({\n namespace: `conformance-${invocation}-${name}`,\n runId: 'run-one',\n });\n const failures: ArtifactStoreConformanceFailure[] = [];\n for (const testCase of cases) {\n try {\n await testCase.run(factory, scope);\n } catch (error) {\n failures.push({\n case: testCase.name,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures.map((failure) => Object.freeze(failure))),\n });\n}\n\n/** Throw one readable error when an ArtifactStore provider breaks the contract. */\nexport async function assertArtifactStoreConformance(\n factory: ArtifactStoreConformanceFactory,\n): Promise<void> {\n const report = await runArtifactStoreConformance(factory);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Artifact store conformance failed: ${detail}`);\n}\n","/**\n * The workspace provider conformance kit (roadmap D12): the behavioral\n * checks every provider must pass — capture and verify naming drift, the\n * lease lifecycle with typed second claims, fork requiring a held lease\n * and starting at the anchored revision, and recovery never stealing a\n * live lease. Framework-free, like the graph kit.\n */\n\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { WorkspaceAnchor, WorkspaceProvider } from './provider.js';\n\nexport interface WorkspaceProviderConformanceFixture {\n readonly provider: WorkspaceProvider;\n /** An anchor captured from the prepared workspace. */\n readonly anchor: WorkspaceAnchor;\n /** A unique child identity for the fork cases. */\n readonly childId: string;\n /** Mutates the workspace after the fork cases, so drift is observable. */\n readonly driftWorkspace: () => Promise<void>;\n}\n\nexport interface WorkspaceProviderConformanceFailure {\n readonly case: string;\n readonly message: string;\n}\n\nexport interface WorkspaceProviderConformanceReport {\n readonly ok: boolean;\n readonly cases: number;\n readonly failures: readonly WorkspaceProviderConformanceFailure[];\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n/** Run the behavioral checks for any workspace provider. */\nexport function runWorkspaceProviderConformance(\n fixture: WorkspaceProviderConformanceFixture,\n): Promise<WorkspaceProviderConformanceReport> {\n const { provider, anchor, childId, driftWorkspace } = fixture;\n const cases: { name: string; run: () => Promise<void> }[] = [\n {\n name: 'verify ok on the captured anchor',\n run: async () => {\n const result = await provider.verify(anchor);\n if (!isDeepStrictEqual(result, { ok: true })) {\n throw new Error(`expected ok, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'fork requires a lease held for the anchor',\n run: async () => {\n const result = await provider.fork(anchor, childId, 'not-a-token');\n if (!(result.ok === false && result.kind === 'unleased')) {\n throw new Error(`expected an unleased refusal, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'lease lifecycle: acquire, second claim held, release, reacquire',\n run: async () => {\n const first = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (first.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(first)}`);\n }\n const second = await provider.acquireLease('kit-other', 'kit-scope', anchor);\n if (!(second.ok === false && second.kind === 'held' && second.owner === 'kit-owner')) {\n throw new Error(`second claim not typed as held: ${JSON.stringify(second)}`);\n }\n const wrongRelease = await provider.releaseLease('not-the-token');\n if (!(wrongRelease.ok === false && wrongRelease.kind === 'not-owner')) {\n throw new Error(`wrong token release not refused: ${JSON.stringify(wrongRelease)}`);\n }\n const released = await provider.releaseLease(first.token);\n if (released.ok !== true) {\n throw new Error(`release failed: ${JSON.stringify(released)}`);\n }\n const reacquired = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (reacquired.ok !== true) {\n throw new Error(`reacquire failed: ${JSON.stringify(reacquired)}`);\n }\n const reRelease = await provider.releaseLease(\n reacquired.ok === true ? reacquired.token : '',\n );\n if (reRelease.ok !== true) {\n throw new Error(`reacquired release failed: ${JSON.stringify(reRelease)}`);\n }\n },\n },\n {\n name: 'fork starts at the anchored revision under its lease',\n run: async () => {\n const lease = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (lease.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(lease)}`);\n }\n const forked = await provider.fork(anchor, childId, lease.token);\n if (forked.ok !== true) {\n throw new Error(`fork failed: ${JSON.stringify(forked)}`);\n }\n if (forked.anchor.head !== anchor.head) {\n throw new Error('the forked worktree does not start at the anchored revision');\n }\n const released = await provider.releaseLease(lease.token);\n if (released.ok !== true) {\n throw new Error(`release failed: ${JSON.stringify(released)}`);\n }\n },\n },\n {\n name: 'recovery on no lease is typed, not a steal',\n run: async () => {\n const result = await provider.recoverIncompleteLease();\n if (!(result.ok === false && result.kind === 'none')) {\n throw new Error(`expected a typed none, received ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: 'drift is named and a changed anchor refuses fork',\n run: async () => {\n await driftWorkspace();\n const drifted = await provider.verify(anchor);\n if (drifted.ok !== false || drifted.drift.length === 0) {\n throw new Error(`expected named drift, received ${JSON.stringify(drifted)}`);\n }\n const lease = await provider.acquireLease('kit-owner', 'kit-scope', anchor);\n if (lease.ok !== true) {\n throw new Error(`acquire failed: ${JSON.stringify(lease)}`);\n }\n const forked = await provider.fork(anchor, `${childId}-drift`, lease.token);\n if (!(forked.ok === false && forked.kind === 'anchor-changed')) {\n throw new Error(`expected an anchor-changed refusal, received ${JSON.stringify(forked)}`);\n }\n await provider.releaseLease(lease.token);\n },\n },\n ];\n\n return (async () => {\n const failures: WorkspaceProviderConformanceFailure[] = [];\n for (const item of cases) {\n try {\n await item.run();\n } catch (error) {\n failures.push({ case: item.name, message: message(error) });\n }\n }\n return Object.freeze({\n ok: failures.length === 0,\n cases: cases.length,\n failures: Object.freeze(failures),\n });\n })();\n}\n\n/** Throw one readable error when a provider breaks the contract. */\nexport async function assertWorkspaceProviderConformance(\n fixture: WorkspaceProviderConformanceFixture,\n): Promise<void> {\n const report = await runWorkspaceProviderConformance(fixture);\n if (report.ok) return;\n const detail = report.failures\n .map((failure) => `${failure.case}: ${failure.message}`)\n .join('; ');\n throw new Error(`Workspace provider conformance failed: ${detail}`);\n}\n"]}
|