@aotter/mantle-runtime 0.1.0-alpha.8 → 0.1.2-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +74 -4
  2. package/dist/MantleRuntime.js +12 -4
  3. package/dist/MantleRuntime.js.map +1 -1
  4. package/dist/domain/model/EntryRow.d.ts +10 -1
  5. package/dist/domain/model/EntryRow.d.ts.map +1 -1
  6. package/dist/domain/model/EntryRow.js +19 -0
  7. package/dist/domain/model/EntryRow.js.map +1 -1
  8. package/dist/domain/port/EntryReader.d.ts +34 -0
  9. package/dist/domain/port/EntryReader.d.ts.map +1 -1
  10. package/dist/domain/port/EntryRepository.d.ts +5 -0
  11. package/dist/domain/port/EntryRepository.d.ts.map +1 -1
  12. package/dist/domain/port/index.d.ts +1 -1
  13. package/dist/domain/port/index.d.ts.map +1 -1
  14. package/dist/domain/port/index.js.map +1 -1
  15. package/dist/domain/service/CallableCapabilityProjector.d.ts +28 -0
  16. package/dist/domain/service/CallableCapabilityProjector.d.ts.map +1 -0
  17. package/dist/domain/service/CallableCapabilityProjector.js +67 -0
  18. package/dist/domain/service/CallableCapabilityProjector.js.map +1 -0
  19. package/dist/domain/service/EntryMutationDiagnostics.d.ts.map +1 -1
  20. package/dist/domain/service/EntryMutationDiagnostics.js +11 -1
  21. package/dist/domain/service/EntryMutationDiagnostics.js.map +1 -1
  22. package/dist/domain/service/PathMatcher.d.ts +7 -0
  23. package/dist/domain/service/PathMatcher.d.ts.map +1 -1
  24. package/dist/domain/service/PathMatcher.js +56 -0
  25. package/dist/domain/service/PathMatcher.js.map +1 -1
  26. package/dist/domain/service/RuntimePlanCompiler.d.ts +7 -2
  27. package/dist/domain/service/RuntimePlanCompiler.d.ts.map +1 -1
  28. package/dist/domain/service/RuntimePlanCompiler.js +1 -0
  29. package/dist/domain/service/RuntimePlanCompiler.js.map +1 -1
  30. package/dist/domain/service/index.d.ts +1 -0
  31. package/dist/domain/service/index.d.ts.map +1 -1
  32. package/dist/domain/service/index.js +1 -0
  33. package/dist/domain/service/index.js.map +1 -1
  34. package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -1
  35. package/dist/domain/service/io/JoinedEntryReader.js +2 -3
  36. package/dist/domain/service/io/JoinedEntryReader.js.map +1 -1
  37. package/dist/index.d.ts +8 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +7 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/infrastructure/boot/canonicalMigrations.d.ts +4 -2
  42. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
  43. package/dist/infrastructure/boot/canonicalMigrations.js +9 -2
  44. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
  45. package/dist/infrastructure/http/createMantleRequestHandler.d.ts +3 -0
  46. package/dist/infrastructure/http/createMantleRequestHandler.d.ts.map +1 -1
  47. package/dist/infrastructure/http/createMantleRequestHandler.js +36 -15
  48. package/dist/infrastructure/http/createMantleRequestHandler.js.map +1 -1
  49. package/dist/infrastructure/http/readJsonBody.d.ts +8 -0
  50. package/dist/infrastructure/http/readJsonBody.d.ts.map +1 -0
  51. package/dist/infrastructure/http/readJsonBody.js +36 -0
  52. package/dist/infrastructure/http/readJsonBody.js.map +1 -0
  53. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +22 -17
  54. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
  55. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +74 -69
  56. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
  57. package/dist/infrastructure/mcp/McpToolCatalog.d.ts +11 -9
  58. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
  59. package/dist/infrastructure/mcp/McpToolCatalog.js +62 -72
  60. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
  61. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +3 -1
  62. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
  63. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +141 -20
  64. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
  65. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +2 -0
  66. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
  67. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +5 -1
  68. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
  69. package/dist/infrastructure/persistence/Pagination.d.ts +6 -0
  70. package/dist/infrastructure/persistence/Pagination.d.ts.map +1 -1
  71. package/dist/infrastructure/persistence/Pagination.js +25 -0
  72. package/dist/infrastructure/persistence/Pagination.js.map +1 -1
  73. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts +11 -1
  74. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts.map +1 -1
  75. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js +7 -3
  76. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js.map +1 -1
  77. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts +26 -1
  78. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts.map +1 -1
  79. package/dist/infrastructure/testing/HttpBenchmarkHarness.js +27 -12
  80. package/dist/infrastructure/testing/HttpBenchmarkHarness.js.map +1 -1
  81. package/dist/infrastructure/testing/StorageConformance.d.ts +32 -0
  82. package/dist/infrastructure/testing/StorageConformance.d.ts.map +1 -0
  83. package/dist/infrastructure/testing/StorageConformance.js +305 -0
  84. package/dist/infrastructure/testing/StorageConformance.js.map +1 -0
  85. package/dist/testing-storage.d.ts +3 -0
  86. package/dist/testing-storage.d.ts.map +1 -0
  87. package/dist/testing-storage.js +3 -0
  88. package/dist/testing-storage.js.map +1 -0
  89. package/dist/usecase/content/ListEntriesUseCase.d.ts +1 -1
  90. package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -1
  91. package/dist/usecase/content/ListEntriesUseCase.js +18 -2
  92. package/dist/usecase/content/ListEntriesUseCase.js.map +1 -1
  93. package/dist/usecase/dto/content/index.d.ts +2 -0
  94. package/dist/usecase/dto/content/index.d.ts.map +1 -1
  95. package/dist/usecase/media/DeleteMediaAssetUseCase.d.ts +3 -3
  96. package/dist/usecase/media/DeleteMediaAssetUseCase.d.ts.map +1 -1
  97. package/dist/usecase/media/DeleteMediaAssetUseCase.js +35 -19
  98. package/dist/usecase/media/DeleteMediaAssetUseCase.js.map +1 -1
  99. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +8 -2
  100. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -1
  101. package/dist/usecase/procedure/InvokeBuiltinUseCase.js +96 -14
  102. package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -1
  103. package/dist/usecase/procedure/InvokeProcedureUseCase.js +2 -2
  104. package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -1
  105. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts.map +1 -1
  106. package/dist/usecase/site/UpdateSiteSettingsUseCase.js +8 -1
  107. package/dist/usecase/site/UpdateSiteSettingsUseCase.js.map +1 -1
  108. package/package.json +9 -5
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteMantleStorageAdapter.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/SqliteMantleStorageAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteMantleStorageAdapter.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/SqliteMantleStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  export interface HttpBenchmarkTarget {
2
2
  readonly name: string;
3
3
  readonly url: string | ((iteration: number) => string);
4
- readonly init?: RequestInit;
4
+ readonly init?: RequestInit | ((iteration: number) => RequestInit | Promise<RequestInit>);
5
+ /** Runs after timing ends; assertions must consume the supplied body. */
6
+ readonly validate?: (response: Response, body: ArrayBuffer) => void | Promise<void>;
5
7
  readonly expectedStatus?: number;
6
8
  }
7
9
  export interface HttpBenchmarkOptions {
@@ -9,16 +11,39 @@ export interface HttpBenchmarkOptions {
9
11
  readonly rounds?: number;
10
12
  readonly warmup?: number;
11
13
  readonly fetch?: typeof globalThis.fetch;
14
+ readonly concurrency?: number;
15
+ readonly onSample?: (sample: HttpBenchmarkSample) => void;
16
+ }
17
+ export interface HttpBenchmarkSample {
18
+ readonly name: string;
19
+ readonly iteration: number;
20
+ readonly status: number;
21
+ readonly ttfbMs: number;
22
+ readonly elapsedMs: number;
23
+ readonly responseBytes: number;
24
+ readonly queryCount?: number;
25
+ readonly rowsRead?: number;
12
26
  }
13
27
  export interface HttpBenchmarkResult {
14
28
  readonly name: string;
15
29
  readonly samples: number;
16
30
  readonly status: number;
31
+ /** Full response body time, retained under the original field name. */
17
32
  readonly timingMs: {
18
33
  readonly p50: number;
19
34
  readonly p95: number;
20
35
  readonly max: number;
21
36
  };
37
+ readonly ttfbMs: {
38
+ readonly p50: number;
39
+ readonly p95: number;
40
+ readonly max: number;
41
+ };
42
+ readonly responseBytes: {
43
+ readonly p50: number;
44
+ readonly p95: number;
45
+ readonly max: number;
46
+ };
22
47
  readonly queryCount?: {
23
48
  readonly p50: number;
24
49
  readonly p95: number;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpBenchmarkHarness.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/testing/HttpBenchmarkHarness.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1F;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkC9B"}
1
+ {"version":3,"file":"HttpBenchmarkHarness.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/testing/HttpBenchmarkHarness.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  export async function benchmarkHttpRoutes(options) {
3
3
  const rounds = clampCount(options.rounds, 20, 1, 500);
4
4
  const warmup = clampCount(options.warmup, 2, 0, 50);
5
+ const concurrency = clampCount(options.concurrency, 1, 1, 8);
5
6
  const fetcher = options.fetch ?? globalThis.fetch;
6
7
  const results = [];
7
8
  for (const target of options.targets) {
@@ -9,17 +10,24 @@ export async function benchmarkHttpRoutes(options) {
9
10
  await sample(fetcher, target, index);
10
11
  }
11
12
  const timings = [];
13
+ const ttfbs = [];
14
+ const bytes = [];
12
15
  const queryCounts = [];
13
16
  const rowsRead = [];
14
17
  let status = 0;
15
- for (let index = 0; index < rounds; index += 1) {
16
- const current = await sample(fetcher, target, index + warmup);
17
- status = current.status;
18
- timings.push(current.elapsedMs);
19
- if (current.queryCount !== undefined)
20
- queryCounts.push(current.queryCount);
21
- if (current.rowsRead !== undefined)
22
- rowsRead.push(current.rowsRead);
18
+ for (let offset = 0; offset < rounds; offset += concurrency) {
19
+ const batch = await Promise.all(Array.from({ length: Math.min(concurrency, rounds - offset) }, (_, index) => sample(fetcher, target, offset + index + warmup)));
20
+ for (const current of batch) {
21
+ status = current.status;
22
+ timings.push(current.elapsedMs);
23
+ ttfbs.push(current.ttfbMs);
24
+ bytes.push(current.responseBytes);
25
+ if (current.queryCount !== undefined)
26
+ queryCounts.push(current.queryCount);
27
+ if (current.rowsRead !== undefined)
28
+ rowsRead.push(current.rowsRead);
29
+ options.onSample?.(current);
30
+ }
23
31
  }
24
32
  assertMetricCoverage(target.name, "x-mantle-query-count", queryCounts.length, rounds);
25
33
  assertMetricCoverage(target.name, "x-mantle-rows-read", rowsRead.length, rounds);
@@ -28,6 +36,8 @@ export async function benchmarkHttpRoutes(options) {
28
36
  samples: rounds,
29
37
  status,
30
38
  timingMs: distribution(timings),
39
+ ttfbMs: distribution(ttfbs),
40
+ responseBytes: distribution(bytes),
31
41
  ...(queryCounts.length > 0 ? { queryCount: distribution(queryCounts) } : {}),
32
42
  ...(rowsRead.length > 0 ? { rowsRead: distribution(rowsRead) } : {}),
33
43
  });
@@ -35,19 +45,24 @@ export async function benchmarkHttpRoutes(options) {
35
45
  return { version: 1, rounds, warmup, results };
36
46
  }
37
47
  async function sample(fetcher, target, iteration) {
48
+ // Token/proof generation and assertions are client setup, not Worker latency.
49
+ const init = typeof target.init === "function" ? await target.init(iteration) : target.init;
50
+ const url = typeof target.url === "function" ? target.url(iteration) : target.url;
38
51
  const start = performance.now();
39
- const response = await fetcher(typeof target.url === "function" ? target.url(iteration) : target.url, target.init);
40
- await response.arrayBuffer();
52
+ const response = await fetcher(url, init);
53
+ const ttfbMs = performance.now() - start;
54
+ const body = await response.arrayBuffer();
41
55
  const elapsedMs = performance.now() - start;
42
56
  const expected = target.expectedStatus ?? 200;
43
57
  if (response.status !== expected) {
44
58
  throw new Error(`${target.name} returned ${response.status}; expected ${expected}`);
45
59
  }
60
+ await target.validate?.(response, body);
46
61
  const queryCount = numberHeader(response, "x-mantle-query-count");
47
62
  const rowsRead = numberHeader(response, "x-mantle-rows-read");
48
63
  return {
49
- status: response.status,
50
- elapsedMs,
64
+ name: target.name, iteration, status: response.status,
65
+ ttfbMs, elapsedMs, responseBytes: body.byteLength,
51
66
  ...(queryCount === undefined ? {} : { queryCount }),
52
67
  ...(rowsRead === undefined ? {} : { rowsRead }),
53
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"HttpBenchmarkHarness.js","sourceRoot":"","sources":["../../../src/infrastructure/testing/HttpBenchmarkHarness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpBenchmarkHarness.js","sourceRoot":"","sources":["../../../src/infrastructure/testing/HttpBenchmarkHarness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { PreparedMantleStorage } from "../../domain/port/MantleStorageAdapter.js";
2
+ import { type RuntimePlan } from "../../domain/service/RuntimePlanCompiler.js";
3
+ export interface StorageConformanceFixture {
4
+ readonly storage: PreparedMantleStorage;
5
+ /** Release all resources, including the isolated database, even after failure. */
6
+ readonly cleanup: () => void | Promise<void>;
7
+ }
8
+ export interface StorageConformanceOptions {
9
+ /**
10
+ * Prepare a fresh, empty store for each check. Never supply a live database.
11
+ * Adapters with a locale policy must enable en, zh-TW and ja for this fixture.
12
+ */
13
+ readonly create: (plan: RuntimePlan) => Promise<StorageConformanceFixture>;
14
+ }
15
+ export interface StorageConformanceFailure {
16
+ readonly check: string;
17
+ readonly phase: "setup" | "assertion" | "cleanup";
18
+ readonly message: string;
19
+ }
20
+ export interface StorageConformanceReport {
21
+ readonly ok: boolean;
22
+ /** Stable check identifiers, in execution order, including failed checks. */
23
+ readonly checks: readonly string[];
24
+ readonly failures: readonly StorageConformanceFailure[];
25
+ }
26
+ /**
27
+ * Check the existing semantic ports using synthetic JSON data and a sealed plan.
28
+ * Cases run sequentially with separate storage. Failures never suppress cleanup
29
+ * or later cases. This is a baseline, not certification of every adapter feature.
30
+ */
31
+ export declare function runStorageConformance(options: StorageConformanceOptions): Promise<StorageConformanceReport>;
32
+ //# sourceMappingURL=StorageConformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageConformance.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/testing/StorageConformance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAEnG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACzD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAwBnC"}
@@ -0,0 +1,305 @@
1
+ import { linkManifestSet, parseManifestSources } from "@aotter/mantle-spec";
2
+ import { EntryStatusConflict, EntryVersionConflict } from "../../domain/model/EntryRow.js";
3
+ import { compileRuntimePlan } from "../../domain/service/RuntimePlanCompiler.js";
4
+ /**
5
+ * Check the existing semantic ports using synthetic JSON data and a sealed plan.
6
+ * Cases run sequentially with separate storage. Failures never suppress cleanup
7
+ * or later cases. This is a baseline, not certification of every adapter feature.
8
+ */
9
+ export async function runStorageConformance(options) {
10
+ const plan = fixturePlan();
11
+ const failures = [];
12
+ for (const [check, run] of checks) {
13
+ let fixture;
14
+ try {
15
+ fixture = await options.create(plan);
16
+ }
17
+ catch (error) {
18
+ failures.push({ check, phase: "setup", message: errorMessage(error) });
19
+ continue;
20
+ }
21
+ try {
22
+ await run(fixture.storage);
23
+ }
24
+ catch (error) {
25
+ failures.push({ check, phase: "assertion", message: errorMessage(error) });
26
+ }
27
+ finally {
28
+ try {
29
+ await fixture.cleanup();
30
+ }
31
+ catch (error) {
32
+ failures.push({ check, phase: "cleanup", message: errorMessage(error) });
33
+ }
34
+ }
35
+ }
36
+ return { ok: failures.length === 0, checks: checks.map(([id]) => id), failures };
37
+ }
38
+ const collection = "conformance-posts";
39
+ const otherCollection = "conformance-other";
40
+ const checks = [
41
+ ["entries.crud", async ({ entries }) => {
42
+ equal(await entries.get("a"), null, "missing get");
43
+ equal(await entries.readById("a"), null, "missing readById");
44
+ const args = entry("a");
45
+ const created = await entries.create(args);
46
+ equal(created, {
47
+ id: "a", collection, status: "draft", version: 1, data: args.data,
48
+ authorId: "synthetic-author", createdAt: 100, updatedAt: 100, locale: "en",
49
+ }, "created row");
50
+ equal(await entries.get("a"), created, "persisted create");
51
+ const updated = await entries.update({
52
+ id: "a", collection, expectedVersion: 1, data: { title: "Replacement" }, now: 200,
53
+ });
54
+ equal(updated, {
55
+ id: "a", collection, status: "draft", version: 2,
56
+ data: { title: "Replacement" }, authorId: "synthetic-author",
57
+ createdAt: 100, updatedAt: 200,
58
+ }, "update replaces data and clears lifted locale");
59
+ equal(await entries.get("a"), updated, "persisted update");
60
+ equal(await entries.delete({
61
+ id: "a", collection: otherCollection, expectedVersion: 2, expectedStatus: "draft",
62
+ }), { removed: false }, "delete respects collection");
63
+ equal(await entries.get("a"), updated, "wrong-collection delete preserves row");
64
+ const deletion = { id: "a", collection, expectedVersion: 2, expectedStatus: "draft" };
65
+ equal(await entries.delete(deletion), { removed: true }, "delete existing row");
66
+ equal(await entries.get("a"), null, "deleted get");
67
+ equal(await entries.readById("a"), null, "deleted public read");
68
+ equal(await entries.delete(deletion), { removed: false }, "delete missing row");
69
+ }],
70
+ ["entries.version-conflicts", async ({ entries }) => {
71
+ await entries.create(entry("a"));
72
+ const updates = await Promise.allSettled(["first", "second"].map((title) => entries.update({
73
+ id: "a", collection, expectedVersion: 1, data: { title }, now: 200,
74
+ })));
75
+ equal(updates.filter((result) => result.status === "fulfilled").length, 1, "one concurrent update wins");
76
+ const rejected = updates.find((result) => result.status === "rejected");
77
+ assert(rejected?.status === "rejected", "concurrent loser rejects");
78
+ assert(rejected.reason instanceof EntryVersionConflict, "concurrent loser is EntryVersionConflict");
79
+ equal([rejected.reason.id, rejected.reason.expected, rejected.reason.actual], ["a", 1, 2], "OCC details");
80
+ const before = await entries.get("a");
81
+ assert(before !== null, "concurrent winner is persisted");
82
+ equal(before.version, 2, "only one version increment");
83
+ await conflict(() => entries.update({
84
+ id: "a", collection, expectedVersion: 1, data: { title: "stale" }, now: 300,
85
+ }), EntryVersionConflict, 1, 2);
86
+ await conflict(() => entries.transitionStatus({
87
+ id: "a", collection, expectedVersion: 1, expectedStatus: "draft", to: "published", now: 300,
88
+ }), EntryVersionConflict, 1, 2);
89
+ await conflict(() => entries.delete({
90
+ id: "a", collection, expectedVersion: 1, expectedStatus: "draft",
91
+ }), EntryVersionConflict, 1, 2);
92
+ equal(await entries.get("a"), before, "version conflicts leave row unchanged");
93
+ }],
94
+ ["entries.status-conflicts", async ({ entries }) => {
95
+ const original = await entries.create(entry("a"));
96
+ await conflict(() => entries.transitionStatus({
97
+ id: "a", collection, expectedStatus: "published", expectedVersion: 1, to: "archived", now: 200,
98
+ }), EntryStatusConflict, "published", "draft");
99
+ await conflict(() => entries.delete({
100
+ id: "a", collection, expectedVersion: 1, expectedStatus: "published",
101
+ }), EntryStatusConflict, "published", "draft");
102
+ equal(await entries.get("a"), original, "status conflicts leave row unchanged");
103
+ const published = await entries.transitionStatus({
104
+ id: "a", collection, expectedStatus: "draft", expectedVersion: 1, to: "published", now: 200,
105
+ });
106
+ equal(published, { ...original, status: "published", version: 2, updatedAt: 200 }, "successful status transition");
107
+ equal(await entries.get("a"), published, "persisted transition");
108
+ }],
109
+ ["entries.clone-isolation", async ({ entries }) => {
110
+ const data = { title: "Original", nested: { values: ["stored"] } };
111
+ const created = await entries.create({ ...entry("a"), data });
112
+ data.nested.values.push("input mutation");
113
+ created.data["title"] = "returned mutation";
114
+ const expected = { title: "Original", nested: { values: ["stored"] } };
115
+ equal((await entries.get("a"))?.data, expected, "create data is isolated from storage");
116
+ const readers = [
117
+ () => entries.get("a"),
118
+ () => entries.readById("a"),
119
+ async () => (await entries.list({ collection })).rows[0],
120
+ ];
121
+ for (const read of readers) {
122
+ const row = await read();
123
+ assert(row != null, "isolation fixture exists");
124
+ const nested = row.data["nested"];
125
+ nested.values.push("read mutation");
126
+ equal((await entries.get("a"))?.data, expected, "nested read mutation does not persist");
127
+ }
128
+ const replacement = { nested: { values: ["replacement"] } };
129
+ const updated = await entries.update({ id: "a", collection, expectedVersion: 1, data: replacement, now: 200 });
130
+ replacement.nested.values.push("input mutation");
131
+ updated.data["nested"].values.push("returned mutation");
132
+ equal((await entries.get("a"))?.data, { nested: { values: ["replacement"] } }, "update data is isolated from storage");
133
+ }],
134
+ ["entries.read-helpers", async ({ entries }) => {
135
+ for (const args of [
136
+ { ...entry("en"), status: "published", now: 100 },
137
+ { ...entry("zh", "zh-TW"), status: "published", now: 200 },
138
+ { ...entry("missing"), data: { slug: "shared", group: "g" }, status: "published", now: 300 },
139
+ { ...entry("null"), data: { slug: "shared", group: "g", locale: null }, status: "published", now: 400 },
140
+ { ...entry("draft"), now: 500 },
141
+ { ...entry("other"), collection: otherCollection, status: "published", now: 600 },
142
+ ])
143
+ await entries.create(args);
144
+ const query = { collection, slug: "shared", status: "published" };
145
+ equal((await entries.readBySlug({ ...query, locale: "en" }))?.id, "en", "exact locale");
146
+ equal((await entries.readBySlug({ ...query, locale: "zh-TW" }))?.locale, "zh-TW", "lifted locale");
147
+ equal((await entries.readBySlug({ ...query, locale: null }))?.id, "null", "null locale includes missing/null");
148
+ equal((await entries.readBySlug(query))?.id, "null", "omitted locale accepts all locales");
149
+ equal(await entries.readBySlug({ ...query, locale: "ja" }), null, "unmatched locale");
150
+ equal((await entries.readByDataField({ collection, field: "group", value: "g", status: "published", locale: "en" }))?.id, "en", "data-field read respects status/locale");
151
+ equal(ids(await entries.readByDataFieldIn({ collection, field: "group", values: ["g", "g"], status: "published", locale: null })), ["null", "missing"], "IN read deduplicates values and filters locale");
152
+ equal(await entries.readByDataFieldIn({ collection, field: "group", values: [] }), [], "empty IN read");
153
+ equal(ids(await entries.readByDataFieldIn({ collection, field: "group", values: ["g"], status: "published", latestPerValue: true })), ["null"], "latest parent per join value");
154
+ equal(ids(await entries.readPublished({ collection, limit: 2 })), ["null", "missing"], "published limit/status/collection");
155
+ equal(ids(await entries.readPublished({ collection, locale: "en" })), ["en"], "published exact locale");
156
+ const pageArgs = { collection, locale: "en", includeUnlocalized: true, limit: 2 };
157
+ const page = await entries.readPublishedPage(pageArgs);
158
+ equal(ids(page.rows), ["null", "missing"], "published page merges shared locale and retains order");
159
+ assert(page.nextCursor !== undefined, "published page exposes continuation");
160
+ const next = await entries.readPublishedPage({ ...pageArgs, cursor: page.nextCursor, dataFields: ["slug", "absent"] });
161
+ equal(ids(next.rows), ["en"], "published continuation excludes other locales and drafts");
162
+ equal(next.rows[0]?.data, { slug: "shared", absent: null }, "published metadata projection");
163
+ equal(next.rows[0]?.locale, "en", "metadata projection retains envelope locale");
164
+ equal(next.nextCursor, undefined, "last published page terminates");
165
+ equal(ids(await entries.findManyByDataField({ collection, field: "group", value: "g", limit: 2 })), ["draft", "null"], "findMany includes drafts and honors limit");
166
+ equal((await entries.findByDataField({ collection, field: "slug", value: "shared", status: "published" }))?.id, "null", "repository data-field read");
167
+ equal((await entries.findByDataFields({ collection, fields: { slug: "shared", locale: "en" }, excludeId: "draft" }))?.id, "en", "composite read and excludeId");
168
+ equal(await entries.findByDataFields({ collection, fields: { slug: "absent", locale: "en" } }), null, "unmatched composite read");
169
+ const publicRows = [
170
+ await entries.readById("en"),
171
+ await entries.readBySlug({ ...query, locale: "en" }),
172
+ await entries.readByDataField({ collection, field: "slug", value: "shared" }),
173
+ ...await entries.readByDataFieldIn({ collection, field: "group", values: ["g"] }),
174
+ ...await entries.readPublished({ collection }),
175
+ ...(await entries.readPublishedPage({ collection })).rows,
176
+ ...await entries.findManyByDataField({ collection, field: "group", value: "g", limit: 10 }),
177
+ ];
178
+ const allowed = new Set(["id", "collection", "locale", "status", "version", "data", "createdAt", "updatedAt"]);
179
+ for (const row of publicRows) {
180
+ assert(row !== null, "public projection exists");
181
+ equal(Object.keys(row).filter((key) => !allowed.has(key)), [], "public projection excludes persistence fields");
182
+ const stored = await entries.get(row.id);
183
+ assert(stored !== null, "public row has a stored counterpart");
184
+ const { authorId: _authorId, ...projection } = stored;
185
+ equal(row, projection, "public projection preserves public fields");
186
+ }
187
+ }],
188
+ ["entries.cursors", async ({ entries }) => {
189
+ for (const id of ["a", "d", "b", "c", "e"])
190
+ await entries.create(entry(id));
191
+ await entries.create({ ...entry("other"), collection: otherCollection });
192
+ await entries.create({ ...entry("published"), status: "published" });
193
+ const query = { collection, status: "draft", limit: 2 };
194
+ for (const direction of ["asc", "desc"]) {
195
+ const sort = { field: "updatedAt", direction };
196
+ const expected = direction === "asc" ? ["a", "b", "c", "d", "e"] : ["e", "d", "c", "b", "a"];
197
+ const first = await entries.list({ ...query, sort });
198
+ equal(ids(first.rows), expected.slice(0, 2), "first page uses stable id tie-break");
199
+ assert(first.nextCursor !== undefined, "first page has next cursor");
200
+ equal(first.previousCursor, undefined, "first page has no previous cursor");
201
+ const second = await entries.list({ ...query, sort, cursor: first.nextCursor });
202
+ equal(ids(second.rows), expected.slice(2, 4), "forward page has no duplicates or skips");
203
+ assert(second.previousCursor !== undefined && second.nextCursor !== undefined, "middle page has both cursors");
204
+ const back = await entries.list({ ...query, sort, cursor: second.previousCursor, cursorDirection: "backward" });
205
+ equal(ids(back.rows), ids(first.rows), "backward cursor restores first page in display order");
206
+ equal(back.previousCursor, undefined, "backward first page has no previous cursor");
207
+ const last = await entries.list({ ...query, sort, cursor: second.nextCursor });
208
+ equal(ids(last.rows), expected.slice(4), "last page");
209
+ equal(last.nextCursor, undefined, "last page has no next cursor");
210
+ equal(ids((await entries.list({ ...query, sort, cursor: first.nextCursor })).rows), ids(second.rows), "cursor can be replayed deterministically");
211
+ }
212
+ }],
213
+ ["views.declarative", async ({ entries, views }) => {
214
+ for (const [id, locale, score, status] of [
215
+ ["a", "en", 2, "published"], ["b", "zh-TW", 3, "published"],
216
+ ["c", "en", 1, "published"], ["draft", "en", 9, "draft"],
217
+ ["ja", "ja", 8, "published"],
218
+ ])
219
+ await entries.create({ ...entry(id, locale), status, data: { title: id, locale, score } });
220
+ const first = await views.execute({ view: "conformance-ranked", params: { minimum: 0 }, show: 2 });
221
+ equal(first, { rows: [{ id: "b", title: "b", score: 3 }, { id: "a", title: "a", score: 2 }], page: 1, show: 2, hasMore: true }, "View projection, nested AND/OR and ordering");
222
+ const second = await views.execute({ view: "conformance-ranked", params: { minimum: 0 }, show: 2, page: 2 });
223
+ equal(second, { rows: [{ id: "c", title: "c", score: 1 }], page: 2, show: 2, hasMore: false }, "View pagination");
224
+ equal((await views.execute({ view: "conformance-ranked", params: { minimum: 2 }, show: 2 })).rows, [{ id: "b", title: "b", score: 3 }], "View parameter binding");
225
+ equal((await views.execute({ view: "conformance-ranked", params: { minimum: 9 } })).rows, [], "View with no matches");
226
+ }],
227
+ ];
228
+ function entry(id, locale = "en") {
229
+ return {
230
+ id, collection, status: "draft", authorId: "synthetic-author", now: 100,
231
+ data: { title: id, slug: "shared", group: "g", locale },
232
+ };
233
+ }
234
+ function ids(rows) {
235
+ return rows.map(({ id }) => id);
236
+ }
237
+ function assert(condition, message) {
238
+ if (!condition)
239
+ throw new Error(message);
240
+ }
241
+ function equal(actual, expected, message) {
242
+ const a = stableJson(actual);
243
+ const e = stableJson(expected);
244
+ assert(a === e, `${message}: expected ${e}, received ${a}`);
245
+ }
246
+ // Object key order and absent optional properties are not storage contracts.
247
+ function stableJson(value) {
248
+ return JSON.stringify(value, (_key, child) => {
249
+ if (!child || typeof child !== "object" || Array.isArray(child))
250
+ return child;
251
+ return Object.fromEntries(Object.entries(child).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));
252
+ });
253
+ }
254
+ async function conflict(run, kind, expected, actual) {
255
+ try {
256
+ await run();
257
+ }
258
+ catch (error) {
259
+ assert(error instanceof kind, `expected ${kind.name}, received ${errorMessage(error)}`);
260
+ equal([error.id, error.expected, error.actual], ["a", expected, actual], `${kind.name} details`);
261
+ return;
262
+ }
263
+ throw new Error(`expected ${kind.name}, operation succeeded`);
264
+ }
265
+ function errorMessage(error) {
266
+ return error instanceof Error ? error.message : String(error);
267
+ }
268
+ function fixturePlan() {
269
+ const schemas = [collection, otherCollection].map((name) => ({
270
+ apiVersion: "cms.mantle.aotter.net/v1", kind: "Schema", metadata: { name },
271
+ spec: {
272
+ title: name, lifecycle: "publishing", localized: true,
273
+ schema: { type: "object", properties: {
274
+ title: { type: "string" }, slug: { type: "string" }, group: { type: "string" },
275
+ locale: { type: ["string", "null"] }, score: { type: "number" }, nested: { type: "object" },
276
+ } },
277
+ },
278
+ }));
279
+ const view = {
280
+ apiVersion: "cms.mantle.aotter.net/v1", kind: "View", metadata: { name: "conformance-ranked" },
281
+ spec: {
282
+ surface: "public", from: collection, fields: ["id", "title", "score"],
283
+ params: { type: "object", required: ["minimum"], properties: { minimum: { type: "number" } } },
284
+ filter: { and: [
285
+ { eq: { field: "status", value: "published" } },
286
+ { or: ["en", "zh-TW"].map((locale) => ({ eq: { field: "locale", value: locale } })) },
287
+ { gt: { field: "score", value: { $param: "minimum" } } },
288
+ ] },
289
+ orderBy: [{ field: "score", direction: "desc" }], limit: 20,
290
+ },
291
+ };
292
+ const parsed = parseManifestSources({
293
+ sources: [{ sourceId: "memory:storage-conformance", text: [...schemas, view].map((atom) => JSON.stringify(atom)).join("\n---\n") }],
294
+ });
295
+ if (!parsed.ok)
296
+ throw new Error(`Conformance fixture parse failed: ${JSON.stringify(parsed.diagnostics)}`);
297
+ const linked = linkManifestSet(parsed.value);
298
+ if (!linked.ok)
299
+ throw new Error(`Conformance fixture link failed: ${JSON.stringify(linked.diagnostics)}`);
300
+ const compiled = compileRuntimePlan(linked.value);
301
+ if (!compiled.ok)
302
+ throw new Error(`Conformance fixture compile failed: ${JSON.stringify(compiled.diagnostics)}`);
303
+ return compiled.value;
304
+ }
305
+ //# sourceMappingURL=StorageConformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageConformance.js","sourceRoot":"","sources":["../../../src/infrastructure/testing/StorageConformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Portable storage contract checks; no Node or test-framework dependency. */
2
+ export * from "./infrastructure/testing/StorageConformance.js";
3
+ //# sourceMappingURL=testing-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-storage.d.ts","sourceRoot":"","sources":["../src/testing-storage.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,gDAAgD,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Portable storage contract checks; no Node or test-framework dependency. */
2
+ export * from "./infrastructure/testing/StorageConformance.js";
3
+ //# sourceMappingURL=testing-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-storage.js","sourceRoot":"","sources":["../src/testing-storage.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,gDAAgD,CAAC"}
@@ -16,7 +16,7 @@ import type { ListEntriesRequest } from "../dto/content/index.js";
16
16
  * — agent authors who care about that reach for `executePage`.
17
17
  *
18
18
  * - `executePage(req): ListEntriesResult` — what
19
- * cursor-aware callers (MCP `list_entries`, admin pagination,
19
+ * cursor-aware callers (Admin pagination,
20
20
  * long-tail walkers) want. Returns `{ rows, nextCursor? }`.
21
21
  *
22
22
  * Why split: the Mantle thesis says the runtime should carry complexity
@@ -1 +1 @@
1
- {"version":3,"file":"ListEntriesUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/content/ListEntriesUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,KAAK,EACV,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAMjC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;IAGzD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC;IAKlE,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;CA6B9B"}
1
+ {"version":3,"file":"ListEntriesUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/content/ListEntriesUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,KAAK,EACV,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAMjC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;IAGzD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC;IAKlE,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;CAqC9B"}