feat(namespace): conformance green 19/19 — data-aware did-you-mean on unindexed bare addresses, ordering contract on the column top-K path (never drop, nulls last, ties by id), shape-complete addressed reads (entity views AND raw storage shapes, shadow-proof both scopes), per-key source matching for dotted addresses; refusal classes unified under UnresolvableFieldError
This commit is contained in:
parent
7492b6cb59
commit
8e962dabda
4 changed files with 134 additions and 61 deletions
|
|
@ -110,11 +110,15 @@ function matchesSource(entity: Record<string, unknown>, source: AggregateDefinit
|
|||
// live in the custom bag, so those filters could never match anything.
|
||||
if (source.where && Object.keys(source.where).length > 0) {
|
||||
const e = entity as unknown as HNSWNounWithMetadata
|
||||
const resolved: Record<string, unknown> = {}
|
||||
for (const key of Object.keys(source.where)) {
|
||||
resolved[key] = readAddressed(e, key)
|
||||
for (const [key, condition] of Object.entries(source.where)) {
|
||||
// Evaluate ONE field at a time under a neutral key: the address may be
|
||||
// dotted ('system.subtype'), and the filter evaluator would otherwise
|
||||
// walk dots as a nested path instead of treating the key as an address.
|
||||
const value = readAddressed(e, key)
|
||||
if (!matchesMetadataFilter({ v: value }, { v: condition } as Record<string, unknown>)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if (!matchesMetadataFilter(resolved, source.where)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
|
|
|
|||
Reference in a new issue