@undefineds.co/xpod 0.3.6 → 0.3.14
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/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-benchmark.js","sourceRoot":"","sources":["../../../src/storage/rdf/models-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { DataFactory } from 'n3';\nimport { termToId } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport type { QuintPattern, QueryOptions, QuintStore, StoreStats } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xJoinMetrics,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xNumericObjectRangePattern,\n Rdf3xTriplePattern,\n RdfBindingRow,\n RdfIndexMetrics,\n RdfIndexStats,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfShadowDiff,\n} from './types';\nimport { canonicalQuadKey, diffQuads } from './RdfShadowComparator';\nimport type { SolidRdfEngine } from './SolidRdfEngine';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\n\nconst { namedNode, literal } = DataFactory;\n\nexport type RdfBenchmarkScale = 'small' | 'medium' | 'large';\n\nexport const RDF_MODELS_SYNTHETIC_MESSAGE_QUADS = 4;\n\nconst RDF_MODELS_SCALE_TARGET_QUADS: Record<RdfBenchmarkScale, number> = {\n small: 48,\n medium: 10_000,\n large: 1_000_000,\n};\n\nconst RDF_MODELS_SYNTHETIC_POD_COUNTS: Record<RdfBenchmarkScale, number> = {\n small: 1,\n medium: 1,\n large: 4,\n};\n\nexport interface RdfModelBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: QuintPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n}\n\nexport interface RdfModelLocalQueryBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: RdfLocalQuery;\n expectedPlan: string[];\n}\n\nexport interface RdfModelBenchmarkRunOptions {\n cases?: readonly RdfModelBenchmarkCase[];\n localQueryCases?: readonly RdfModelLocalQueryBenchmarkCase[];\n scale?: RdfBenchmarkScale;\n iterations?: number;\n}\n\nexport interface RdfModelBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelLocalQueryBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoices: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfLocalQueryMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelBenchmarkReport {\n engine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n planMatched: boolean;\n failedPlanCases: string[];\n cases: RdfModelBenchmarkResult[];\n localQueryCases: RdfModelLocalQueryBenchmarkResult[];\n}\n\nexport interface RdfModelShadowBenchmarkRunOptions extends RdfModelBenchmarkRunOptions {}\n\nexport interface RdfModelShadowBenchmarkSide {\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n storeStats?: StoreStats;\n}\n\nexport interface RdfModelShadowPerformanceComparison {\n p95DeltaMs: number;\n p95Ratio: number;\n matched: boolean;\n}\n\nexport interface RdfModelShadowSpaceComparison {\n databaseDeltaBytes: number;\n tableDeltaBytes: number;\n indexDeltaBytes: number;\n databaseRatio: number;\n tableRatio: number;\n indexRatio: number;\n matched: boolean;\n unavailableReason?: string;\n}\n\nexport interface RdfModelShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n compatibility: RdfModelShadowBenchmarkSide;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n performance: RdfModelShadowPerformanceComparison;\n space: RdfModelShadowSpaceComparison;\n}\n\nexport interface RdfModelShadowBenchmarkReport {\n engine: 'shadow';\n compatibilityEngine: 'quint-store';\n candidateEngine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n planMatched: boolean;\n spaceGateEnforced: boolean;\n performanceMatched: boolean;\n spaceMatched: boolean;\n failedPlanCases: string[];\n failedPerformanceCases: string[];\n failedSpaceCases: string[];\n cases: RdfModelShadowBenchmarkResult[];\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xIndexMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowJoinBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xJoinMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkReport {\n engine: 'rdf3x-shadow';\n primaryEngine: 'solid-rdf';\n candidateEngine: 'solid-rdf3x';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n skippedCases: string[];\n skippedJoinCases: string[];\n failedCases: string[];\n failedJoinCases: string[];\n rebuild: {\n scannedQuads: number;\n uniqueTriples: number;\n memberships: number;\n projectionRows: number;\n durationMs: number;\n };\n cases: RdfModelRdf3xShadowBenchmarkResult[];\n joinCases: RdfModelRdf3xShadowJoinBenchmarkResult[];\n}\n\ninterface Rdf3xJoinBenchmarkShape {\n patterns: RdfQuadJoinPattern[];\n options?: RdfQuadJoinOptions;\n}\n\ntype JsonPattern = Record<string, unknown>;\n\nconst RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\nconst DCT_CREATED = 'http://purl.org/dc/terms/created';\nconst DCT_MODIFIED = 'http://purl.org/dc/terms/modified';\nconst DCT_TITLE = 'http://purl.org/dc/terms/title';\nconst SIOC_CONTENT = 'http://rdfs.org/sioc/ns#content';\nconst SIOC_HAS_MEMBER = 'http://rdfs.org/sioc/ns#has_member';\nconst UDFS = 'https://undefineds.co/ns#';\nconst MEETING = 'http://www.w3.org/ns/pim/meeting#';\nconst SIOC = 'http://rdfs.org/sioc/ns#';\nconst FOAF_AGENT = 'http://xmlns.com/foaf/0.1/Agent';\nconst VCARD_INDIVIDUAL = 'http://www.w3.org/2006/vcard/ns#Individual';\nconst SCHEMA_CREATIVE_WORK = 'http://schema.org/CreativeWork';\nconst PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS = 25;\nconst PERFORMANCE_P95_MAX_RATIO = 8;\n\nexport const rdfModelsBenchmarkCases: readonly RdfModelBenchmarkCase[] = [\n {\n name: 'list chats',\n resource: 'chat',\n purpose: 'surface list with graph-scope and type filter',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}LongChat`),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list tasks',\n resource: 'task',\n purpose: 'task surface list with status/type filtering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Task`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by chat',\n resource: 'thread',\n purpose: 'relation lookup under a chat index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/chat/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by task',\n resource: 'thread',\n purpose: 'relation lookup under a task index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/task/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list messages by thread',\n resource: 'message',\n purpose: 'date-bucketed message lookup through thread inverse membership',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(SIOC_HAS_MEMBER),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'latest message',\n resource: 'message',\n purpose: 'ORDER BY + LIMIT over message date bucket',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'latest run',\n resource: 'run',\n purpose: 'ORDER BY + LIMIT over date-bucketed run documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'pending runs',\n resource: 'run',\n purpose: 'status filter for scheduler and state center',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'running runs',\n resource: 'run',\n purpose: 'status filter for active runtime execution',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('running'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by workspace',\n resource: 'run',\n purpose: 'workspace relation filter for runtime placement and steering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by numeric priority',\n resource: 'run',\n purpose: 'typed numeric literal range filter for scheduler priority queues',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}priority`),\n object: { $gt: literal('9', namedNode('http://www.w3.org/2001/XMLSchema#integer')) },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'limit'],\n },\n {\n name: 'run with steps',\n resource: 'runStep',\n purpose: 'one-to-many run-step relation lookup',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}run`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 200 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'task materialization due time',\n resource: 'schedule',\n purpose: 'schedule due-time candidate lookup',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { $lte: literal('2026-05-18T01:30:00.000Z') },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['object'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'order', 'limit'],\n },\n {\n name: 'search message literals',\n resource: 'message',\n purpose: 'literal/text index candidate that reconnects to RDF subjects',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(SIOC_CONTENT),\n object: { $contains: 'searchable' },\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['text-index', 'rdf-subject-join'],\n },\n {\n name: 'load by exact id',\n resource: 'any',\n purpose: 'base-relative id expands to exact subject IRI',\n minScale: 'small',\n query: {\n pattern: {\n subject: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#this'),\n },\n },\n expectedPlan: ['SPOG'],\n },\n {\n name: 'acl graph prefix scoped query',\n resource: 'any',\n purpose: 'scope filter must avoid unbounded full-pod scans',\n minScale: 'medium',\n query: {\n pattern: {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n predicate: namedNode(DCT_MODIFIED),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'list providers',\n resource: 'aiProvider',\n purpose: 'AI provider settings list and provider/model relation baseline',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Provider`),\n graph: { $startsWith: 'https://pod.example/alice/settings/providers/' },\n },\n },\n expectedPlan: ['graph-scope', 'type-filter'],\n },\n {\n name: 'models by provider',\n resource: 'aiModel',\n purpose: 'AI model lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}isProvidedBy`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'credentials by provider',\n resource: 'credential',\n purpose: 'credential lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}provider`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'list agents',\n resource: 'agent',\n purpose: 'agent identity list under the shared models agent resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(FOAF_AGENT),\n graph: { $startsWith: 'https://pod.example/alice/.data/agents/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list contacts',\n resource: 'contact',\n purpose: 'contact index list under the shared models contact resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(VCARD_INDIVIDUAL),\n graph: { $startsWith: 'https://pod.example/alice/.data/contacts/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list favorites',\n resource: 'favorite',\n purpose: 'favorite list over date-bucketed favorite documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(SCHEMA_CREATIVE_WORK),\n graph: { $startsWith: 'https://pod.example/alice/.data/favorites/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n];\n\nexport const rdfModelsLocalQueryBenchmarkCases: readonly RdfModelLocalQueryBenchmarkCase[] = [\n {\n name: 'latest message by thread local query',\n resource: 'message',\n purpose: 'date-bucketed message timeline keeps ORDER BY/LIMIT inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#thread_1'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['message', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'next queued run by workspace local query',\n resource: 'run',\n purpose: 'run state center scheduler query keeps status/workspace/date joins in SQL before LIMIT',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['run', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'asc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'run steps by run local query',\n resource: 'runStep',\n purpose: 'one-to-many run-step lookup keeps type and run relation in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}RunStep`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(`${UDFS}run`),\n object: namedNode('https://pod.example/alice/.data/task/default/2026/05/18/runs.ttl#run_1'),\n },\n ],\n select: ['step'],\n orderBy: [\n {\n variable: 'step',\n direction: 'asc',\n },\n ],\n limit: 50,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'task materialization active due local query',\n resource: 'schedule',\n purpose: 'task scheduler materialization keeps active status and due-time filter in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Schedule`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('active'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { variable: 'nextRunAt' },\n },\n ],\n filters: [\n {\n variable: 'nextRunAt',\n operator: '$lte',\n value: literal('2026-05-18T01:30:00.000Z'),\n },\n ],\n select: ['schedule', 'nextRunAt'],\n orderBy: [\n {\n variable: 'nextRunAt',\n direction: 'asc',\n },\n ],\n limit: 100,\n },\n expectedPlan: ['join-index', 'range-filter-pushdown', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'message count by thread with having',\n resource: 'message',\n purpose: 'grouped message count uses SQL GROUP BY/HAVING before pagination',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n groupBy: ['thread'],\n aggregate: {\n type: 'count',\n as: 'count',\n variable: 'message',\n },\n having: [\n {\n variable: 'count',\n operator: '$gt',\n value: literal('2', namedNode('http://www.w3.org/2001/XMLSchema#integer')),\n },\n ],\n select: ['thread', 'count'],\n orderBy: [\n {\n variable: 'count',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['group-count-index', 'having-pushdown', 'order', 'limit'],\n },\n {\n name: 'message join count distinct',\n resource: 'message',\n purpose: 'message/thread BGP aggregate count stays inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}Message`),\n },\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n aggregates: [\n {\n type: 'count',\n as: 'messageCount',\n variable: 'message',\n },\n {\n type: 'count',\n as: 'threadCount',\n variable: 'thread',\n distinct: true,\n },\n ],\n },\n expectedPlan: ['join-count-index'],\n },\n];\n\nexport function rdfModelsBenchmarkCaseNames(): string[] {\n return rdfModelsBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsLocalQueryBenchmarkCaseNames(): string[] {\n return rdfModelsLocalQueryBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsBenchmarkScaleTargetQuads(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SCALE_TARGET_QUADS[scale];\n}\n\nexport function rdfModelsBenchmarkSyntheticPodCount(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SYNTHETIC_POD_COUNTS[scale];\n}\n\nexport function estimateRdfModelsSyntheticQuadCount(syntheticMessages: number): number {\n return Math.max(0, Math.floor(syntheticMessages)) * RDF_MODELS_SYNTHETIC_MESSAGE_QUADS;\n}\n\nexport function defaultSyntheticMessagesForRdfModelsScale(scale: RdfBenchmarkScale): number {\n if (scale === 'small') {\n return 12;\n }\n return Math.ceil(rdfModelsBenchmarkScaleTargetQuads(scale) / RDF_MODELS_SYNTHETIC_MESSAGE_QUADS);\n}\n\nexport function rdfModelsBenchmarkScaleSatisfied(scale: RdfBenchmarkScale, seedQuadCount: number): boolean {\n return seedQuadCount >= rdfModelsBenchmarkScaleTargetQuads(scale);\n}\n\nexport function runRdfModelsBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelBenchmarkReport {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = cases.map((testCase) => runBenchmarkCase(engine, testCase, iterations));\n const localQueryResults = localQueryCases.map((testCase) => runLocalQueryBenchmarkCase(engine, testCase, iterations));\n const failedPlanCases = [\n ...results.filter((result) => !result.planMatched).map((result) => result.name),\n ...localQueryResults.filter((result) => !result.planMatched).map((result) => result.name),\n ];\n\n return {\n engine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n planMatched: failedPlanCases.length === 0,\n failedPlanCases,\n cases: results,\n localQueryCases: localQueryResults,\n };\n}\n\nexport async function runRdfModelsShadowBenchmark(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n options: RdfModelShadowBenchmarkRunOptions = {},\n): Promise<RdfModelShadowBenchmarkReport> {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = [];\n const compatibilityStats = await compatibilityStore.stats();\n\n for (const testCase of cases) {\n results.push(await runShadowBenchmarkCase(engine, compatibilityStore, testCase, iterations, compatibilityStats));\n }\n const spaceGateEnforced = scaleRank(scale) >= scaleRank('medium');\n const failedPerformanceCases = results.filter((result) => !result.performance.matched).map((result) => result.name);\n const failedSpaceCases = spaceGateEnforced\n ? results.filter((result) => !result.space.matched).map((result) => result.name)\n : [];\n\n return {\n engine: 'shadow',\n compatibilityEngine: 'quint-store',\n candidateEngine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: results.every((result) => result.matched),\n orderedMatched: results.every((result) => result.orderedMatch),\n planMatched: results.every((result) => result.planMatched),\n spaceGateEnforced,\n performanceMatched: failedPerformanceCases.length === 0,\n spaceMatched: failedSpaceCases.length === 0,\n failedPlanCases: results.filter((result) => !result.planMatched).map((result) => result.name),\n failedPerformanceCases,\n failedSpaceCases,\n cases: results,\n };\n}\n\nexport function runRdfModelsRdf3xShadowBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelRdf3xShadowBenchmarkReport {\n if (!engine.rdf3xIndex) {\n throw new Error('runRdfModelsRdf3xShadowBenchmark requires SolidRdfEngine.rdf3xIndex');\n }\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const rebuild = engine.rdf3xIndex.rebuildFromCurrentQuads();\n const results = cases.map((testCase) => runRdf3xShadowBenchmarkCase(engine, testCase, iterations));\n const joinResults = localQueryCases.map((testCase) => runRdf3xShadowJoinBenchmarkCase(engine, testCase, iterations));\n const supportedResults = results.filter((result) => result.supported);\n const supportedJoinResults = joinResults.filter((result) => result.supported);\n\n return {\n engine: 'rdf3x-shadow',\n primaryEngine: 'solid-rdf',\n candidateEngine: 'solid-rdf3x',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: supportedResults.every((result) => result.matched)\n && supportedJoinResults.every((result) => result.matched),\n orderedMatched: supportedResults.every((result) => result.orderedMatch)\n && supportedJoinResults.every((result) => result.orderedMatch),\n skippedCases: results.filter((result) => !result.supported).map((result) => result.name),\n skippedJoinCases: joinResults.filter((result) => !result.supported).map((result) => result.name),\n failedCases: supportedResults.filter((result) => !result.matched || !result.orderedMatch).map((result) => result.name),\n failedJoinCases: supportedJoinResults\n .filter((result) => !result.matched || !result.orderedMatch)\n .map((result) => result.name),\n rebuild,\n cases: results,\n joinCases: joinResults,\n };\n}\n\nfunction runBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfIndexMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.scan(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.quads.map(canonicalQuadKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n ...execution,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runLocalQueryBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelLocalQueryBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfLocalQueryMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.query(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.bindings.map(bindingKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n plan: [],\n scannedRows: 0,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n indexChoices: [],\n filtersApplied: 0,\n filtersPushedDown: 0,\n };\n const missingPlan = missingExpectedLocalQueryPlan(testCase, finalMetrics);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n physicalPlan: finalMetrics.plan,\n scannedRows: finalMetrics.scannedRows,\n indexChoices: [...finalMetrics.indexChoices],\n fallbackReason: null,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runRdf3xShadowBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowBenchmarkResult {\n const baseResult = baseRdf3xShadowBenchmarkResult(testCase);\n const unsupportedReason = unsupportedRdf3xPatternReason(testCase.query.pattern);\n if (unsupportedReason) {\n return {\n ...baseResult,\n supported: false,\n unsupportedReason,\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfQuads: Quad[] = [];\n let rdf3xQuads: Quad[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = engine.rdf3xIndex!.scan(rdf3xPatternFor(testCase.query.pattern), testCase.query.options);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xQuads = rdf3xResult.quads;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const rdf3xKeys = rdf3xQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, rdf3xQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xIndexMetrics;\n\n return {\n ...baseResult,\n supported: true,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction runRdf3xShadowJoinBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowJoinBenchmarkResult {\n const unsupportedReason = unsupportedRdf3xJoinQueryReason(testCase.query);\n if (unsupportedReason) {\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: false,\n unsupportedReason,\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const joinShape = rdf3xJoinShapeFor(testCase.query);\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfBindings: RdfBindingRow[] = [];\n let rdf3xBindings: RdfBindingRow[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xJoinMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = engine.index.joinPatterns(joinShape.patterns, joinShape.options);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfBindings = solidRdfResult.bindings;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = engine.rdf3xIndex!.joinPatterns(joinShape.patterns, joinShape.options);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xBindings = rdf3xResult.bindings;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfBindings.map(bindingKey);\n const rdf3xKeys = rdf3xBindings.map(bindingKey);\n const diff = diffBindingKeys(solidRdfKeys, rdf3xKeys);\n const orderedMatch = isSemanticallyOrderedJoin(joinShape.options)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xJoinMetrics;\n\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: true,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xJoinBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction baseRdf3xShadowBenchmarkResult(testCase: RdfModelBenchmarkCase): Pick<\n RdfModelRdf3xShadowBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n };\n}\n\nfunction emptySolidRdfBenchmarkSide(engine: SolidRdfEngine): RdfModelRdf3xShadowBenchmarkResult['solidRdf'] {\n const metrics: RdfIndexMetrics = {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n return {\n ...benchmarkSide([], []),\n ...benchmarkExecution(metrics),\n metrics,\n indexStats: engine.index.stats(),\n };\n}\n\nasync function runShadowBenchmarkCase(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n compatibilityStats: StoreStats,\n): Promise<RdfModelShadowBenchmarkResult> {\n const compatibilityDurationsMs: number[] = [];\n const solidRdfDurationsMs: number[] = [];\n let compatibilityQuads: Quad[] = [];\n let solidRdfQuads: Quad[] = [];\n let metrics: RdfIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n compatibilityQuads = await compatibilityStore.get(testCase.query.pattern, testCase.query.options);\n compatibilityDurationsMs.push(Math.max(0, Date.now() - start));\n\n start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n metrics = solidRdfResult.metrics;\n }\n\n const compatibilityKeys = compatibilityQuads.map(canonicalQuadKey);\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, compatibilityQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? solidRdfKeys.join('\\n') === compatibilityKeys.join('\\n')\n : true;\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n const compatibilitySide = {\n ...benchmarkSide(compatibilityKeys, compatibilityDurationsMs),\n storeStats: compatibilityStats,\n };\n const solidRdfSide = {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...execution,\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n compatibility: compatibilitySide,\n solidRdf: solidRdfSide,\n performance: comparePerformance(compatibilitySide, solidRdfSide),\n space: compareSpace(compatibilityStats, solidRdfSide.indexStats),\n };\n}\n\nfunction benchmarkExecution(metrics: RdfIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xBenchmarkExecution(metrics: Rdf3xIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xJoinBenchmarkExecution(metrics: Rdf3xJoinMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction baseRdf3xShadowJoinBenchmarkResult(testCase: RdfModelLocalQueryBenchmarkCase): Pick<\n RdfModelRdf3xShadowJoinBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n };\n}\n\nfunction unsupportedRdf3xJoinQueryReason(query: RdfLocalQuery): string | undefined {\n if (query.patterns.length === 0) {\n return 'RDF-3X join shadow requires at least one required BGP pattern';\n }\n if (query.values?.length) {\n return 'RDF-3X join shadow does not support VALUES yet';\n }\n if (query.textSearch?.length || query.vectorSearch?.length) {\n return 'RDF-3X join shadow does not support search sources yet';\n }\n if (query.unions?.length || query.minus?.length || query.exists?.length || query.optional?.length) {\n return 'RDF-3X join shadow only supports required BGP queries';\n }\n if (query.binds?.length || query.filters?.length || query.having?.length) {\n return 'RDF-3X join shadow does not support local query filters or BIND yet';\n }\n if (query.groupBy?.length || query.aggregate || query.aggregates?.length) {\n return 'RDF-3X join shadow does not support aggregate queries yet';\n }\n\n for (const pattern of query.patterns) {\n const joinPattern = rdf3xJoinPatternFor(pattern);\n const unsupportedPattern = unsupportedRdf3xPatternReason(joinPattern.pattern);\n if (unsupportedPattern) {\n return unsupportedPattern;\n }\n }\n return undefined;\n}\n\nfunction rdf3xJoinShapeFor(query: RdfLocalQuery): Rdf3xJoinBenchmarkShape {\n return {\n patterns: query.patterns.map(rdf3xJoinPatternFor),\n options: {\n ...(query.select ? { project: query.select } : {}),\n ...(query.distinct ? { distinct: true } : {}),\n ...(query.orderBy ? { orderBy: query.orderBy } : {}),\n ...(query.limit !== undefined ? { limit: query.limit } : {}),\n ...(query.offset !== undefined ? { offset: query.offset } : {}),\n },\n };\n}\n\nfunction rdf3xJoinPatternFor(pattern: RdfQueryPattern): RdfQuadJoinPattern {\n const compiledPattern: RdfQuadJoinPattern['pattern'] = {};\n const variables: RdfQuadJoinPattern['variables'] = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as RdfQueryPatternKey[]) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isQueryVariable(value)) {\n variables[key] = value.variable;\n } else {\n compiledPattern[key] = value;\n }\n }\n return {\n pattern: compiledPattern,\n variables,\n };\n}\n\nfunction isQueryVariable(value: unknown): value is { variable: string } {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && 'variable' in value\n && typeof (value as { variable?: unknown }).variable === 'string';\n}\n\nfunction unsupportedRdf3xPatternReason(pattern: QuintPattern): string | undefined {\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value || isTerm(value as any)) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n continue;\n }\n if (key === 'object' && isSupportedRdf3xNumericObjectRangePattern(value)) {\n continue;\n }\n return `unsupported ${key} pattern for RDF-3X shadow`;\n }\n return undefined;\n}\n\nfunction rdf3xPatternFor(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n result.graph = { $startsWith: value.$startsWith };\n continue;\n }\n if (key === 'object' && isSupportedRdf3xNumericObjectRangePattern(value)) {\n result.object = value;\n continue;\n }\n if (!isTerm(value as any)) {\n throw new Error(`RDF-3X shadow benchmark only supports exact ${key} terms or graph prefixes`);\n }\n result[key] = value as import('@rdfjs/types').Term;\n }\n return result;\n}\n\nfunction isGraphPrefixPattern(value: unknown): value is { $startsWith: string } {\n return value !== null\n && typeof value === 'object'\n && '$startsWith' in value\n && typeof (value as { $startsWith?: unknown }).$startsWith === 'string';\n}\n\nfunction isSupportedRdf3xNumericObjectRangePattern(value: unknown): value is Rdf3xNumericObjectRangePattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n let hasRange = false;\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const rangeValue = (value as Rdf3xNumericObjectRangePattern)[operator];\n if (rangeValue === undefined) {\n continue;\n }\n hasRange = true;\n if (numericRangeValue(rangeValue) === undefined) {\n return false;\n }\n }\n return hasRange;\n}\n\nfunction numericRangeValue(value: Term | string | number): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n if (value.termType !== 'Literal' || !isRdfNumericDatatype(value.datatype.value)) {\n return undefined;\n }\n const parsed = rdfNumericValue(value.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction isSemanticallyOrdered(options?: QueryOptions): boolean {\n return Boolean(options?.order && options.order.length > 0);\n}\n\nfunction isSemanticallyOrderedJoin(options?: RdfQuadJoinOptions): boolean {\n return Boolean(options?.orderBy && options.orderBy.length > 0);\n}\n\nfunction benchmarkSide(keys: string[], durationsMs: number[]): RdfModelShadowBenchmarkSide {\n return {\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n };\n}\n\nfunction diffBindingKeys(primaryKeys: string[], candidateKeys: string[]): RdfShadowDiff {\n const primarySet = new Set(primaryKeys);\n const candidateSet = new Set(candidateKeys);\n return {\n missingFromPrimary: Array.from(candidateSet).filter((key) => !primarySet.has(key)).sort(),\n extraInPrimary: Array.from(primarySet).filter((key) => !candidateSet.has(key)).sort(),\n };\n}\n\nfunction comparePerformance(\n compatibility: RdfModelShadowBenchmarkSide,\n solidRdf: RdfModelShadowBenchmarkSide,\n): RdfModelShadowPerformanceComparison {\n const p95DeltaMs = solidRdf.p95DurationMs - compatibility.p95DurationMs;\n const p95Ratio = solidRdf.p95DurationMs / Math.max(1, compatibility.p95DurationMs);\n return {\n p95DeltaMs,\n p95Ratio,\n matched: p95DeltaMs <= PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS\n || p95Ratio <= PERFORMANCE_P95_MAX_RATIO,\n };\n}\n\nfunction compareSpace(\n compatibility: StoreStats,\n solidRdf: RdfIndexStats,\n): RdfModelShadowSpaceComparison {\n if (\n compatibility.databaseBytes === undefined\n || compatibility.tableBytes === undefined\n || compatibility.indexBytes === undefined\n ) {\n return {\n databaseDeltaBytes: 0,\n tableDeltaBytes: 0,\n indexDeltaBytes: 0,\n databaseRatio: 0,\n tableRatio: 0,\n indexRatio: 0,\n matched: false,\n unavailableReason: 'compatibility store did not report database/table/index bytes',\n };\n }\n\n const databaseDeltaBytes = solidRdf.databaseBytes - compatibility.databaseBytes;\n const tableDeltaBytes = solidRdf.tableBytes - compatibility.tableBytes;\n const indexDeltaBytes = solidRdf.indexBytes - compatibility.indexBytes;\n\n return {\n databaseDeltaBytes,\n tableDeltaBytes,\n indexDeltaBytes,\n databaseRatio: ratio(solidRdf.databaseBytes, compatibility.databaseBytes),\n tableRatio: ratio(solidRdf.tableBytes, compatibility.tableBytes),\n indexRatio: ratio(solidRdf.indexBytes, compatibility.indexBytes),\n matched: databaseDeltaBytes <= 0 && tableDeltaBytes <= 0 && indexDeltaBytes <= 0,\n };\n}\n\nfunction ratio(candidate: number, baseline: number): number {\n if (baseline <= 0) {\n return candidate <= 0 ? 1 : Number.POSITIVE_INFINITY;\n }\n return candidate / baseline;\n}\n\nfunction missingExpectedPlan(testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): string[] {\n return testCase.expectedPlan.filter((label) => !matchesExpectedPlanLabel(label, testCase, metrics));\n}\n\nfunction matchesExpectedPlanLabel(label: string, testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): boolean {\n const pattern = testCase.query.pattern;\n const planText = (metrics.queryPlan ?? []).join('\\n');\n switch (label) {\n case 'graph-scope':\n return Boolean(pattern.graph) && metrics.indexChoice.includes('G');\n case 'type-filter':\n return isTerm(pattern.predicate as any)\n && termToId(pattern.predicate as any) === RDF_TYPE\n && Boolean(pattern.object)\n && metrics.indexChoice !== 'full-scan';\n case 'predicate-filter':\n return Boolean(pattern.predicate) && metrics.indexChoice.includes('P');\n case 'predicate-object-filter':\n return Boolean(pattern.predicate) && Boolean(pattern.object) && metrics.indexChoice.includes('P');\n case 'predicate-object-range-filter':\n return Boolean(pattern.predicate)\n && (planText.includes('_range') || planText.includes('LexicalRange(') || planText.includes('NumericRange('));\n case 'limit':\n return testCase.query.options?.limit !== undefined && planText.includes('LIMIT');\n case 'order':\n return Boolean(testCase.query.options?.order?.length) && planText.includes('ORDER BY');\n case 'text-index':\n return planText.includes('TextSearch(');\n case 'rdf-subject-join':\n return planText.includes('TextSearch(')\n && metrics.indexChoice !== 'full-scan'\n && metrics.matchedRows >= metrics.returnedRows;\n case 'SPOG':\n case 'POSG':\n case 'GSPO':\n case 'GPOS':\n case 'OSPG':\n return metrics.indexChoice === label;\n default:\n return false;\n }\n}\n\nfunction missingExpectedLocalQueryPlan(\n testCase: RdfModelLocalQueryBenchmarkCase,\n metrics: RdfLocalQueryMetrics,\n): string[] {\n return testCase.expectedPlan.filter((label) => !matchesExpectedLocalQueryPlanLabel(label, metrics));\n}\n\nfunction matchesExpectedLocalQueryPlanLabel(label: string, metrics: RdfLocalQueryMetrics): boolean {\n const planText = metrics.plan.join('\\n');\n switch (label) {\n case 'group-count-index':\n return planText.includes('Aggregate(group-count-index)');\n case 'having-pushdown':\n return planText.includes('IndexGroupCountHaving(')\n && !planText.includes('\\nHaving(');\n case 'order':\n return planText.includes('IndexGroupCountOrder(') && !planText.includes('\\nSort');\n case 'limit':\n return planText.includes('IndexGroupCountLimit') && !planText.includes('\\nLimit');\n case 'join-index':\n return planText.includes('IndexJoin(')\n && !planText.includes('\\nIndexScan(');\n case 'join-order-pushdown':\n return planText.includes('IndexJoinOrder(')\n && !planText.includes('\\nSort');\n case 'join-limit-pushdown':\n return planText.includes('IndexJoinLimit')\n && !planText.includes('\\nLimit');\n case 'range-filter-pushdown':\n return metrics.filtersPushedDown > 0\n && planText.includes('LexicalRange(');\n case 'join-count-index':\n return planText.includes('Aggregate(join-count-distinct-index)')\n && planText.includes('IndexJoinCount(')\n && !planText.includes('\\nIndexScan(');\n default:\n return false;\n }\n}\n\nfunction bindingKey(binding: RdfBindingRow): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction checksum(keys: string[], ordered: boolean): string {\n const normalized = ordered ? keys : [...keys].sort();\n return createHash('sha256')\n .update(normalized.join('\\n'))\n .digest('hex');\n}\n\nfunction percentile(values: number[], percentileValue: number): number {\n if (values.length === 0) {\n return 0;\n }\n const sorted = [...values].sort((a, b) => a - b);\n const index = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil(sorted.length * percentileValue) - 1),\n );\n return sorted[index];\n}\n\nfunction scaleRank(scale: RdfBenchmarkScale): number {\n switch (scale) {\n case 'small':\n return 1;\n case 'medium':\n return 2;\n case 'large':\n return 3;\n default: {\n const exhaustive: never = scale;\n return exhaustive;\n }\n }\n}\n\nfunction serializePattern(pattern: QuintPattern): JsonPattern {\n return Object.fromEntries(\n Object.entries(pattern).map(([key, value]) => [key, serializePatternValue(value)]),\n );\n}\n\nfunction serializeLocalQuery(query: RdfLocalQuery): JsonPattern {\n return serializePatternValue(query) as JsonPattern;\n}\n\nfunction serializePatternValue(value: unknown): unknown {\n if (!value) {\n return value;\n }\n if (isTerm(value as any)) {\n return termToId(value as any);\n }\n if (Array.isArray(value)) {\n return value.map(serializePatternValue);\n }\n if (typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .map(([key, nested]) => [key, serializePatternValue(nested)]),\n );\n }\n return value;\n}\n"]}
|