This repository has been archived on 2026-09-03. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
open-brainy/docs/api-contract.json

1634 lines
28 KiB
JSON
Raw Normal View History

feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"contractVersion": 1,
"engine": "@soulcraftlabs/brainy",
"compatibility": {
"minor": "additive — a new optional door, a new served operator, a new error class; every existing implementation still conforms",
"major": "breaking — a door removed, an answer narrowed, an ordering law changed, an optional door promoted to required, or an operator moved from served to refused"
},
"doors": [
{
"name": "adaptiveHistoryBudgetBytes",
"kind": "method",
"arity": 1
},
{
"name": "add",
"kind": "method",
"arity": 1
},
{
"name": "addMany",
"kind": "method",
"arity": 1
},
{
"name": "adoptLogAuthority",
"kind": "method",
"arity": 0
},
{
"name": "adoptLogAuthorityInner",
"kind": "method",
"arity": 0
},
{
"name": "aggViewFromEntity",
"kind": "method",
"arity": 1
},
{
"name": "anyProviderMigrating",
"kind": "method",
"arity": 0
},
{
"name": "applyFusionScoring",
"kind": "method",
"arity": 2
},
{
"name": "applyGraphConstraints",
"kind": "method",
"arity": 2
},
{
"name": "armIdleFlushTimer",
"kind": "method",
"arity": 2
},
{
"name": "asOf",
"kind": "method",
"arity": 2
},
{
"name": "assertGenerationStoreReady",
"kind": "method",
"arity": 1
},
{
"name": "assertWritable",
"kind": "method",
"arity": 1
},
{
"name": "audit",
"kind": "method",
"arity": 0
},
{
"name": "auditGraph",
"kind": "method",
"arity": 0
},
{
"name": "autoAdoptLegacyVfsBlobsIfNeeded",
"kind": "method",
"arity": 0
},
{
"name": "autoAlpha",
"kind": "method",
"arity": 1
},
{
"name": "autoCompactHistory",
"kind": "method",
"arity": 0
},
{
"name": "awaitMigrationLock",
"kind": "method",
"arity": 1
},
{
"name": "awaitPendingEmbeds",
"kind": "method",
"arity": 0
},
{
"name": "backfillAggregateIfNeeded",
"kind": "method",
"arity": 1
},
{
"name": "batchGet",
"kind": "method",
"arity": 2
},
{
"name": "brainWideStrictRequiresSubtype",
"kind": "method",
"arity": 1
},
{
"name": "bridgeLegacyPendingEmbedSidecars",
"kind": "method",
"arity": 0
},
{
"name": "buildAtGenerationVectors",
"kind": "method",
"arity": 2
},
{
"name": "buildGraphView",
"kind": "method",
"arity": 4
},
{
"name": "buildMetadataFilter",
"kind": "method",
"arity": 1
},
{
"name": "buildMigrationUpdate",
"kind": "method",
"arity": 5
},
{
"name": "buildRelationMigrationUpdate",
"kind": "method",
"arity": 5
},
{
"name": "cacheVerbInt",
"kind": "method",
"arity": 2
},
{
"name": "canServeVectorAtGeneration",
"kind": "method",
"arity": 1
},
{
"name": "captureEmbedCheckpoint",
"kind": "method",
"arity": 0
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "checkHealth",
"kind": "method",
"arity": 0
},
{
"name": "checkMigrations",
"kind": "method",
"arity": 0
},
{
"name": "clear",
"kind": "method",
"arity": 0
},
{
"name": "clearPendingEmbed",
"kind": "method",
"arity": 1
},
{
"name": "close",
"kind": "method",
"arity": 0
},
{
"name": "closeDurableSteps",
"kind": "method",
"arity": 0
},
{
"name": "cluster",
"kind": "method",
"arity": 1
},
{
"name": "collectProviderInvariants",
"kind": "method",
"arity": 0
},
{
"name": "compactHistory",
"kind": "method",
"arity": 1
},
{
"name": "consumeMetadataWatermarkVerdict",
"kind": "method",
"arity": 1
},
{
"name": "convertMetadataToEntity",
"kind": "method",
"arity": 2
},
{
"name": "convertNounToEntity",
"kind": "method",
"arity": 1
},
{
"name": "counts",
"kind": "accessor"
},
{
"name": "createGenerationStore",
"kind": "method",
"arity": 1
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "createIndex",
"kind": "method",
"arity": 0
},
{
"name": "createMigrationBackupIfNeeded",
"kind": "method",
"arity": 0
},
{
"name": "createPinnedDb",
"kind": "method",
"arity": 1
},
{
"name": "createResult",
"kind": "method",
"arity": 4
},
{
"name": "dbFinalizationRegistry",
"kind": "accessor"
},
{
"name": "dbHost",
"kind": "accessor"
},
{
"name": "defineAggregate",
"kind": "method",
"arity": 1
},
{
"name": "demoteTornEntityTreeStamp",
"kind": "method",
"arity": 4
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "detectIdKind",
"kind": "method",
"arity": 3
},
{
"name": "diagnostics",
"kind": "method",
"arity": 0
},
{
"name": "diff",
"kind": "method",
"arity": 2
},
{
"name": "embed",
"kind": "method",
"arity": 1
},
{
"name": "embedBatch",
"kind": "method",
"arity": 2
},
{
"name": "emitCommitted",
"kind": "method",
"arity": 4
},
{
"name": "enforceSubtypeOnAdd",
"kind": "method",
"arity": 4
},
{
"name": "enforceSubtypeOnRelate",
"kind": "method",
"arity": 4
},
{
"name": "enforceTrackedFieldValues",
"kind": "method",
"arity": 2
},
{
"name": "enhanceNLPResult",
"kind": "method",
"arity": 2
},
{
"name": "enqueuePendingEmbed",
"kind": "method",
"arity": 1
},
{
"name": "ensureAggregationIndex",
"kind": "method",
"arity": 0
},
{
"name": "ensureIndexesLoaded",
"kind": "method",
"arity": 0
},
{
"name": "ensureInitialized",
"kind": "method",
"arity": 1
},
{
"name": "entityForAggFromRawRecord",
"kind": "method",
"arity": 1
},
{
"name": "entityFromGenerationRecord",
"kind": "method",
"arity": 3
},
{
"name": "entityIntsToUuids",
"kind": "method",
"arity": 1
},
{
"name": "entityViewFromRawRecord",
"kind": "method",
"arity": 2
},
{
"name": "excludedVisibilityTiers",
"kind": "method",
"arity": 1
},
{
"name": "executeProximitySearch",
"kind": "method",
"arity": 1
},
{
"name": "executeTextSearch",
"kind": "method",
"arity": 2
},
{
"name": "executeTextSearchScored",
"kind": "method",
"arity": 3
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "executeVectorSearch",
"kind": "method",
"arity": 3
},
{
"name": "executeVectorSearchScored",
"kind": "method",
"arity": 3
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "explain",
"kind": "method",
"arity": 1
},
{
"name": "export",
"kind": "method",
"arity": 0
},
{
"name": "extract",
"kind": "method",
"arity": 2
},
{
"name": "extractConcepts",
"kind": "method",
"arity": 2
},
{
"name": "extractEntities",
"kind": "method",
"arity": 2
},
{
"name": "factSegmentPaths",
"kind": "method",
"arity": 1
},
{
"name": "fieldCountsAggregateName",
"kind": "method",
"arity": 1
},
{
"name": "fillSubtypes",
"kind": "method",
"arity": 1
},
{
"name": "filterIdsBelted",
"kind": "method",
"arity": 2
},
{
"name": "filterIdsWithinBelted",
"kind": "method",
"arity": 2
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "find",
"kind": "method",
"arity": 1
},
{
"name": "findAggregate",
"kind": "method",
"arity": 1
},
{
"name": "findDuplicates",
"kind": "method",
"arity": 1
},
{
"name": "findMatchingWords",
"kind": "method",
"arity": 3
},
{
"name": "flush",
"kind": "method",
"arity": 0
},
{
"name": "formatInfo",
"kind": "method",
"arity": 0
},
{
"name": "formatSubtypeError",
"kind": "method",
"arity": 1
},
{
"name": "generation",
"kind": "method",
"arity": 0
},
{
"name": "generationDigest",
"kind": "method",
"arity": 1
},
{
"name": "get",
"kind": "method",
"arity": 2
},
{
"name": "getActivePlugins",
"kind": "method",
"arity": 0
},
{
"name": "getAvailableFields",
"kind": "method",
"arity": 0
},
{
"name": "getBackgroundDeduplicator",
"kind": "method",
"arity": 0
},
{
"name": "getFieldsForType",
"kind": "method",
"arity": 1
},
{
"name": "getFieldStatistics",
"kind": "method",
"arity": 0
},
{
"name": "getFieldsWithCardinality",
"kind": "method",
"arity": 0
},
{
"name": "getFieldValues",
"kind": "method",
"arity": 1
},
{
"name": "getIndexStats",
"kind": "method",
"arity": 0
},
{
"name": "getIndexStatus",
"kind": "method",
"arity": 0
},
{
"name": "getMemoryStats",
"kind": "method",
"arity": 0
},
{
"name": "getNeighborUuids",
"kind": "method",
"arity": 2
},
{
"name": "getNounCount",
"kind": "method",
"arity": 0
},
{
"name": "getOptimalQueryPlan",
"kind": "method",
"arity": 1
},
{
"name": "getStats",
"kind": "method",
"arity": 1
},
{
"name": "getStorageType",
"kind": "method",
"arity": 0
},
{
"name": "getSubtypeRule",
"kind": "method",
"arity": 1
},
{
"name": "getTripleIntelligence",
"kind": "method",
"arity": 0
},
{
"name": "getTypedNeighbors",
"kind": "method",
"arity": 4
},
{
"name": "getVerbCount",
"kind": "method",
"arity": 0
},
{
"name": "graph",
"kind": "accessor"
},
{
"name": "graphAccelerationProvider",
"kind": "method",
"arity": 0
},
{
"name": "graphCommunities",
"kind": "method",
"arity": 1
},
{
"name": "graphCommunitiesFallback",
"kind": "method",
"arity": 1
},
{
"name": "graphCommunitiesNative",
"kind": "method",
"arity": 2
},
{
"name": "graphEntityInt",
"kind": "method",
"arity": 1
},
{
"name": "graphExport",
"kind": "method",
"arity": 1
},
{
"name": "graphExportFallback",
"kind": "method",
"arity": 1
},
{
"name": "graphExportNative",
"kind": "method",
"arity": 2
},
{
"name": "graphPath",
"kind": "method",
"arity": 3
},
{
"name": "graphPathFallback",
"kind": "method",
"arity": 3
},
{
"name": "graphPathNative",
"kind": "method",
"arity": 4
},
{
"name": "graphRank",
"kind": "method",
"arity": 1
},
{
"name": "graphRankFallback",
"kind": "method",
"arity": 1
},
{
"name": "graphRankNative",
"kind": "method",
"arity": 2
},
{
"name": "graphSubgraph",
"kind": "method",
"arity": 2
},
{
"name": "graphSubgraphFallback",
"kind": "method",
"arity": 4
},
{
"name": "graphSubgraphFromQuery",
"kind": "method",
"arity": 5
},
{
"name": "graphSubgraphNative",
"kind": "method",
"arity": 5
},
{
"name": "groupByLabel",
"kind": "method",
"arity": 2
},
{
"name": "hasStorageMethod",
"kind": "method",
"arity": 1
},
{
"name": "hasVectorOrTextCriteria",
"kind": "method",
"arity": 1
},
{
"name": "health",
"kind": "method",
"arity": 0
},
{
"name": "highlight",
"kind": "method",
"arity": 1
},
{
"name": "highlightSemanticPhase",
"kind": "method",
"arity": 5
},
{
"name": "history",
"kind": "method",
"arity": 2
},
{
"name": "historyStats",
"kind": "method",
"arity": 0
},
{
"name": "hub",
"kind": "accessor"
},
{
"name": "hydrateIdMapperForGraphRebuild",
"kind": "method",
"arity": 0
},
{
"name": "hydrateNativeSubgraph",
"kind": "method",
"arity": 2
},
{
"name": "hydrateResultPage",
"kind": "method",
"arity": 2
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "import",
"kind": "method",
"arity": 2
},
{
"name": "importPluginPackage",
"kind": "method",
"arity": 1
},
{
"name": "incidentEdges",
"kind": "method",
"arity": 3
},
{
"name": "indexStats",
"kind": "method",
"arity": 0
},
{
"name": "init",
"kind": "method",
"arity": 1
},
{
"name": "insights",
"kind": "method",
"arity": 0
},
{
"name": "isClosed",
"kind": "accessor"
},
{
"name": "isClosing",
"kind": "accessor"
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "isEmbeddingReady",
"kind": "method",
"arity": 0
},
{
"name": "isInfrastructureWrite",
"kind": "method",
"arity": 1
},
{
"name": "isInitialized",
"kind": "accessor"
},
{
"name": "isReadOnly",
"kind": "accessor"
},
{
"name": "kickBackgroundFlush",
"kind": "method",
"arity": 1
},
{
"name": "kickEmbedWorker",
"kind": "method",
"arity": 0
},
{
"name": "legacyLayoutMigrationPhase",
"kind": "method",
"arity": 0
},
{
"name": "loadAnalyticsGraph",
"kind": "method",
"arity": 1
},
{
"name": "loadPlugins",
"kind": "method",
"arity": 0
},
{
"name": "logAuthority",
"kind": "method",
"arity": 0
},
{
"name": "maintenanceDebt",
"kind": "method",
"arity": 0
},
{
"name": "materializeAtGeneration",
"kind": "method",
"arity": 1
},
{
"name": "maybeWriteEmbedCheckpoint",
"kind": "method",
"arity": 0
},
{
"name": "maybeWriteEmbedLowWater",
"kind": "method",
"arity": 0
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "metadataIndexRetractionOp",
"kind": "method",
"arity": 3
},
{
"name": "migrate",
"kind": "method",
"arity": 1
},
{
"name": "migrateField",
"kind": "method",
"arity": 1
},
{
"name": "migrateInternal",
"kind": "method",
"arity": 2
},
{
"name": "migrateLegacyZeroNormVfsRootIfNeeded",
"kind": "method",
"arity": 0
},
{
"name": "migrationSnapshot",
"kind": "method",
"arity": 0
},
{
"name": "neededFamiliesMigrating",
"kind": "method",
"arity": 1
},
{
"name": "neighbors",
"kind": "method",
"arity": 2
},
{
"name": "newId",
"kind": "method",
"arity": 0
},
{
"name": "nlp",
"kind": "method",
"arity": 0
},
{
"name": "normalizeConfig",
"kind": "method",
"arity": 1
},
{
"name": "noteEmbedCheckpointCadence",
"kind": "method",
"arity": 0
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "noteWriteForPersistence",
"kind": "method",
"arity": 0
},
{
"name": "now",
"kind": "method",
"arity": 0
},
{
"name": "onChange",
"kind": "method",
"arity": 1
},
{
"name": "pageConnectedIds",
"kind": "method",
"arity": 2
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "pagination",
"kind": "accessor"
},
{
"name": "parseMigrationPath",
"kind": "method",
"arity": 1
},
{
"name": "parseNaturalQuery",
"kind": "method",
"arity": 1
},
{
"name": "pathExists",
"kind": "method",
"arity": 2
},
{
"name": "pendingEmbedCount",
"kind": "method",
"arity": 0
},
{
"name": "pendingResult",
"kind": "method",
"arity": 2
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "performInit",
"kind": "method",
"arity": 1
},
{
"name": "persistPinnedGeneration",
"kind": "method",
"arity": 2
},
{
"name": "persistSingleOp",
"kind": "method",
"arity": 6
},
{
"name": "pickMetadataProbe",
"kind": "method",
"arity": 1
},
{
"name": "pickVectorProbe",
"kind": "method",
"arity": 0
},
{
"name": "pinGeneration",
"kind": "method",
"arity": 1
},
{
"name": "planGetEntity",
"kind": "method",
"arity": 3
},
{
"name": "planTransact",
"kind": "method",
"arity": 1
},
{
"name": "planTxAdd",
"kind": "method",
"arity": 3
},
{
"name": "planTxRelate",
"kind": "method",
"arity": 3
},
{
"name": "planTxRemove",
"kind": "method",
"arity": 3
},
{
"name": "planTxUnrelate",
"kind": "method",
"arity": 3
},
{
"name": "planTxUpdate",
"kind": "method",
"arity": 3
},
{
"name": "projectionGauges",
"kind": "method",
"arity": 0
},
{
"name": "providerForFamily",
"kind": "method",
"arity": 1
},
{
"name": "providerIsMigrating",
"kind": "method",
"arity": 1
},
{
"name": "providerMigrationStatus",
"kind": "method",
"arity": 0
},
{
"name": "queryAggregate",
"kind": "method",
"arity": 2
},
{
"name": "queryIndexFamilies",
"kind": "method",
"arity": 1
},
{
"name": "readPath",
"kind": "method",
"arity": 2
},
{
"name": "readPendingEmbedBound",
"kind": "method",
"arity": 0
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "ready",
"kind": "accessor"
},
{
"name": "rebuildIndexesIfNeeded",
"kind": "method",
"arity": 0
},
{
"name": "rebuildMetadataIndexOnline",
"kind": "method",
"arity": 0
},
{
"name": "reconcileLogDivergence",
"kind": "method",
"arity": 2
},
{
"name": "reconstructPath",
"kind": "method",
"arity": 4
},
{
"name": "recordStateAt",
"kind": "method",
"arity": 3
},
{
"name": "recoverPendingEmbedsFromLog",
"kind": "method",
"arity": 0
},
{
"name": "registerShutdownHooks",
"kind": "method",
"arity": 0
},
{
"name": "relate",
"kind": "method",
"arity": 1
},
{
"name": "related",
"kind": "method",
"arity": 1
},
{
"name": "relateMany",
"kind": "method",
"arity": 1
},
{
"name": "relationFromGenerationRecord",
"kind": "method",
"arity": 2
},
{
"name": "relationshipSubtypesOf",
"kind": "method",
"arity": 1
},
{
"name": "releaseGeneration",
"kind": "method",
"arity": 1
},
{
"name": "remove",
"kind": "method",
"arity": 1
},
{
"name": "removeAggregate",
"kind": "method",
"arity": 1
},
{
"name": "removeMany",
"kind": "method",
"arity": 1
},
{
"name": "removeMigrationBackupSafe",
"kind": "method",
"arity": 0
},
{
"name": "repackHistory",
"kind": "method",
"arity": 1
},
{
"name": "repairIndex",
"kind": "method",
"arity": 1
},
{
"name": "requestFlush",
"kind": "method",
"arity": 1
},
{
"name": "requireProviders",
"kind": "method",
"arity": 1
},
{
"name": "requireSubtype",
"kind": "method",
"arity": 1
},
{
"name": "resolveAsOfGeneration",
"kind": "method",
"arity": 2
},
{
"name": "resolveConnectedIds",
"kind": "method",
"arity": 1
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "resolveDiffEndpoint",
"kind": "method",
"arity": 1
},
{
"name": "resolveHiddenIds",
"kind": "method",
"arity": 1
},
{
"name": "resolveHNSWPersistMode",
"kind": "method",
"arity": 0
},
{
"name": "resolveRawGeneration",
"kind": "method",
"arity": 1
},
{
"name": "resolveRetentionPolicy",
"kind": "method",
"arity": 0
},
{
"name": "resolveVerbEndpointInts",
"kind": "method",
"arity": 1
},
{
"name": "resolveVerbIntsToIds",
"kind": "method",
"arity": 1
},
{
"name": "restore",
"kind": "method",
"arity": 2
},
{
"name": "rrfFusion",
"kind": "method",
"arity": 3
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
},
{
"name": "runAggregationBackfillWalk",
"kind": "method",
"arity": 0
},
{
"name": "runAggregationCatchUp",
"kind": "method",
"arity": 0
},
{
"name": "runEmbedWorker",
"kind": "method",
"arity": 0
},
{
"name": "runOracle",
"kind": "method",
"arity": 1
},
{
"name": "runRepairIndexPhases",
"kind": "method",
"arity": 5
},
{
"name": "scanFacts",
"kind": "method",
"arity": 1
},
{
"name": "seedIdsToInts",
"kind": "method",
"arity": 1
},
{
"name": "selectorToSeedIds",
"kind": "method",
"arity": 1
},
{
"name": "setRetentionBudget",
"kind": "method",
"arity": 1
},
{
"name": "setupEmbedder",
"kind": "method",
"arity": 0
},
{
"name": "setupIndex",
"kind": "method",
"arity": 0
},
{
"name": "setupStorage",
"kind": "method",
"arity": 0
},
{
"name": "similar",
"kind": "method",
"arity": 1
},
{
"name": "similarity",
"kind": "method",
"arity": 2
},
{
"name": "splitForHighlighting",
"kind": "method",
"arity": 2
},
{
"name": "stampBrainFormat",
"kind": "method",
"arity": 0
},
{
"name": "stampBrainFormatIfNeeded",
"kind": "method",
"arity": 0
},
{
"name": "stampEntityTree",
"kind": "method",
"arity": 0
},
{
"name": "stampProjectionWatermarks",
"kind": "method",
"arity": 0
},
{
"name": "stats",
"kind": "method",
"arity": 0
},
{
"name": "storageAdapter",
"kind": "accessor"
},
{
"name": "stream",
"kind": "method",
"arity": 0
},
{
"name": "streaming",
"kind": "accessor"
},
{
"name": "subtypesOf",
"kind": "method",
"arity": 1
},
{
"name": "textIdsWithinBelted",
"kind": "method",
"arity": 2
},
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
{
"name": "trackField",
"kind": "method",
"arity": 1
},
{
"name": "transact",
"kind": "method",
"arity": 2
},
{
"name": "transactionLog",
"kind": "method",
"arity": 1
},
{
"name": "unrelate",
"kind": "method",
"arity": 1
},
{
"name": "unvectorNounForRootMigration",
"kind": "method",
"arity": 1
},
{
"name": "update",
"kind": "method",
"arity": 1
},
{
"name": "updateMany",
"kind": "method",
"arity": 1
},
{
"name": "updateRelation",
"kind": "method",
"arity": 1
},
{
"name": "upsertMergeParams",
"kind": "method",
"arity": 2
},
{
"name": "use",
"kind": "method",
"arity": 1
},
{
"name": "usesDefaultWasmEmbedder",
"kind": "method",
"arity": 0
},
{
"name": "validateIndexConsistency",
"kind": "method",
"arity": 0
},
{
"name": "vectorSearchAtGeneration",
"kind": "method",
"arity": 4
},
{
"name": "verbsToRelations",
"kind": "method",
"arity": 1
},
{
"name": "verbToRelationLike",
"kind": "method",
"arity": 1
},
{
"name": "verifyEntityTreeStamp",
"kind": "method",
"arity": 0
},
{
"name": "verifyGraphAdjacencyLive",
"kind": "method",
"arity": 0
},
{
"name": "verifyLogAuthority",
"kind": "method",
"arity": 0
},
{
"name": "verifyMetadataLive",
"kind": "method",
"arity": 0
},
{
"name": "verifyVectorLive",
"kind": "method",
"arity": 0
},
{
"name": "versionedIndexProviders",
"kind": "method",
"arity": 0
},
{
"name": "vfs",
"kind": "accessor"
},
{
"name": "waitForIndexed",
"kind": "method",
"arity": 2
},
{
"name": "warm",
"kind": "method",
"arity": 0
},
{
"name": "warmupEmbeddings",
"kind": "method",
"arity": 0
},
{
"name": "warnIfReadsDegraded",
"kind": "method",
"arity": 1
},
{
"name": "wireConnectionsCodec",
"kind": "method",
"arity": 0
},
{
"name": "wireGraphIdResolver",
"kind": "method",
"arity": 0
},
{
"name": "writeEmbedCheckpoint",
"kind": "method",
"arity": 0
},
{
"name": "writeEmbedLowWater",
"kind": "method",
"arity": 0
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
}
],
"errors": [
"BrainyError",
"DerivedArtifactMissingError",
"GraphIndexNotReadyError",
fix(contract): the flush gate's internals are #-private — they are not doors The 10.4.11 flush single-flight work added `startFlushLeader` and `promoteQueuedFlush` as TypeScript `private` methods. `private` is erased at compile time, so both still land on the prototype — and the contract manifest emitter reads the surface the BUILD exposes, skipping only names that start with an underscore. On the next regeneration both would have been emitted as contract doors, obliging every engine implementing contract 1 to provide the flush gate's own bookkeeping. A door is a promise; these are internals. Converted to ECMAScript-private (`#`), which keeps them off the prototype entirely, and the reason is recorded on both so the next internal is not written as `private` by habit. `_runFlush` — the flush body itself — was already safe by the emitter's underscore rule. Verified: `npm run build && node scripts/emit-contract-manifest.mjs` then `--check` green at 302 doors, with neither name present. TWO MANIFEST NOTES, both deliberate and neither hidden: 1. The regenerated manifest gains `MetadataArrayTooLargeError`. The emitter lists every `*Error` export from brainyError.js, and that class is the write door's refusal for an over-bound metadata array (this branch's array-bound commit). It is a real addition to the engine's error surface, so the manifest is right to carry it — flagged here because it is a contract-surface change that the cut should accept knowingly, not a side effect that slipped in. 2. `armIdleFlushTimer` and `kickBackgroundFlush` are TypeScript `private` in src and ARE already in the committed manifest as doors — the same leak, one release older. They are left exactly as they are: removing a name the manifest already publishes is a contract deletion, not a hygiene fix, and it belongs to whoever owns contract 1 rather than to this branch.
2026-09-02 13:56:57 -07:00
"MetadataArrayTooLargeError",
feat(contract): declare contract 1, serve three operators, refuse four by name Open Brainy's side of the API contract the accelerated engine published. DECLARED: package.json carries "brainyContract": 1 and the engine states its own via contractVersion() / BRAINY_CONTRACT_VERSION — two engines compare an integer instead of probing prototypes, and a tool reads the package field without importing the engine. Pinned so the two can never drift apart. SERVED: hasAll, noneOf and excludes now work on the index path. The defect underneath was worse than the reported divergence — the metadata index's operator switch had NO DEFAULT CASE, so any operator without a case left the field's match set at its initial [] and find() returned an empty page. Documented, validator-accepted, matcher-implemented operators answering silently wrong. hasAll intersects each element's posting set (an empty operand is vacuously true of every row that has the field), noneOf complements their union, excludes complements contains. REFUSED BY NAME: startsWith, endsWith, matches and length raise INVALID_QUERY naming the operator, the field and the reason. An equality/range posting index cannot evaluate a substring, a pattern or an array length without reading every row — which is the cost this path exists to avoid — so it refuses rather than answering an empty page. Both engines now agree on all 25 tokens and contract 1 has no remaining operator divergence. This is a visible change for a consumer calling those four through find({ where }): an empty page becomes a typed refusal. EMITTED: scripts/emit-contract-manifest.mjs generates docs/api-contract.json from the BUILT surface — prototype doors, exported error classes, the operator sets read out of their single definitions, the field-addressing vocabulary, the health verdicts. Nothing hand-maintained, so a diff between two manifests is a diff between two engines. `--check` fails on a stale manifest, which makes the announce-every-addition duty mechanical rather than remembered. RATIFIED in docs/contract-1-ratification.md: the 41-of-57 required split with the promise spelled out (a refusal is part of a door; deprecation is not removal), the serving-withholding list confirmed exhaustive and identical, the minor/major rule adopted with the announcement duty, the 30 storage seam methods committed as supported surface until Stage 2, and a finding filed against the spec — is / isNot / greaterEqual / lessEqual are listed there as served aliases and have never existed in this engine, which throws INVALID_QUERY on all four.
2026-08-28 10:57:43 -07:00
"MetadataIndexNotReadyError",
"MigrationInProgressError",
"ProtectedArtifactError",
"VectorIndexNotReadyError"
],
"operators": {
"accepted": [
"between",
"contains",
"endsWith",
"eq",
"equals",
"excludes",
"exists",
"greaterThan",
"greaterThanOrEqual",
"gt",
"gte",
"hasAll",
"in",
"length",
"lessThan",
"lessThanOrEqual",
"lt",
"lte",
"matches",
"missing",
"ne",
"noneOf",
"notEquals",
"oneOf",
"startsWith"
],
"servedOnIndexPath": [
"between",
"contains",
"eq",
"equals",
"excludes",
"exists",
"greaterThan",
"greaterThanOrEqual",
"gt",
"gte",
"hasAll",
"in",
"lessThan",
"lessThanOrEqual",
"lt",
"lte",
"missing",
"ne",
"noneOf",
"notEquals",
"oneOf"
],
"refusedByIndexPath": [
"endsWith",
"length",
"matches",
"startsWith"
],
"combinators": [
"allOf",
"anyOf",
"not"
]
},
"fieldAddressing": {
"systemKeyPrefix": "system.",
"systemEntityScalars": [
"confidence",
"createdAt",
"createdBy",
"id",
"service",
"subtype",
"type",
"updatedAt",
"visibility",
"weight"
],
"systemRelationScalars": [
"confidence",
"createdAt",
"createdBy",
"service",
"sourceId",
"subtype",
"targetId",
"updatedAt",
"verb",
"visibility",
"weight"
],
"plumbingFields": [
"_rev",
"connections",
"data",
"level",
"vector"
]
},
"health": {
"verdicts": [
"pass",
"warn",
"fail"
],
"healKinds": [
"none",
"repair",
"rebuild"
],
"servingWithholdingInvariants": [
"index-initialized",
"durable-state-present",
"manifest-residency",
"replay-clean",
"strand-latch"
]
}
}