7523 Commits
Author SHA1 Message Date
Stefano Lottini 35a8460490 just remove commented code 2026-09-28 10:30:21 +02:00
Stefano Lottini 8722ca69bb add new-style find_one (only op dispenser differs. freeform filter) 2026-09-28 10:30:21 +02:00
Stefano Lottini 8a5d394570 find_one: fix projection, add inclSim, reinstate filters 2026-09-28 10:30:21 +02:00
Stefano Lottini 615b3ff3c9 sort op mapper and optype enum, fix filter in legacy f1upd, fix find_distinct by splitting into getLegacyFilterFromOp 2026-09-28 10:30:21 +02:00
Stefano Lottini 253a47dd7b introduce deprecation warning for explicitly-Legacy Ops 2026-09-28 10:30:21 +02:00
Stefano Lottini 69313d2deb switched to free-form in filter+update for (new) find_one_and_update op 2026-09-28 10:30:21 +02:00
Stefano Lottini abd8322b51 restored all legacy ops from main; full split f1upd/legacy f1upd 2026-09-28 10:30:21 +02:00
Stefano Lottini 9a634d7da9 introduced getUpsertFromOp; enable upsert and sort in find_one_and_update 2026-09-28 10:30:21 +02:00
Stefano Lottini fcd8d9a35e expand the find_one_and_update syntax: legacy 'updates:update:...' with deprecation + new reasonable syntax 2026-09-28 10:30:21 +02:00
Stefano Lottini 4128a7c41d find_one_and_update accepts non-doubles for inc and min 2026-09-28 10:30:21 +02:00
Stefano Lottini 0faa7d7e46 remove create_collection_with_class and find_distinct out-of-scope data api operations 2026-09-28 10:30:21 +02:00
Stefano Lottini e5cafec8d9 align DataAPIOpType enum and the corresponding op mapper case clauses 2026-09-28 10:30:21 +02:00
Stefano Lottini 6621625c0d TEMPorarily instrument Data API client to debug-log requests/responses 2026-09-28 10:30:21 +02:00
Stefano Lottini 8768ea7843 getSortFromOp always validates against the ascdesc+vector illegal double-sort and returns at most one 2026-09-28 10:30:21 +02:00
Stefano Lottini 334df15d69 add package-info.java for data api adapter 2026-09-28 10:30:21 +02:00
Stefano Lottini c054d59075 asc/desc sort and vector sort are handled by one and the same getSortFromOp shared utility 2026-09-28 10:30:21 +02:00
Stefano Lottini f68d0b2be3 bump data api client to 2.3.0 2026-09-28 10:30:21 +02:00
Stefano Lottini dbfb1db00f build-time check that no AND and OR are mixed in the data api filters 2026-09-28 10:30:21 +02:00
Stefano Lottini c672b2bafe Data API adapter: numeric filter operators accept integer values less than 2^32 2026-09-28 10:30:21 +02:00
dependabot[bot] 9275b4b7ba build(deps): bump org.bouncycastle:bcprov-jdk18on
Bumps [org.bouncycastle:bcprov-jdk18on](https://github.com/bcgit/bc-java) from 1.84 to 1.85.
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.md)
- [Commits](https://github.com/bcgit/bc-java/commits)

---
updated-dependencies:
- dependency-name: org.bouncycastle:bcprov-jdk18on
  dependency-version: '1.85'
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-18 22:27:38 +00:00
dependabot[bot] ec8b101a64 build(deps): bump com.rabbitmq:amqp-client in /nb-adapters/adapter-amqp
Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.33.1 to 5.34.0.
- [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases)
- [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.33.1...v5.34.0)

---
updated-dependencies:
- dependency-name: com.rabbitmq:amqp-client
  dependency-version: 5.34.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-17 15:17:14 +00:00
Jonathan Shook 9dbbb38c7a test(virtdata): state format_version 2 on the sharded bindings fixture
An unversioned manifest is held to version 1 and refused when it carries a multi-file facet, the rule the loader took from the reference this morning. The fixture predates that rule and now states the version its content needs, as every sharded fixture in nb-vectordata does.
5.25.17-preview 5.25.17-release
2026-09-16 08:24:57 +00:00
Jonathan Shook 56f342d9a1 bump version 2026-09-16 07:17:44 +00:00
Jonathan Shook 5e2b6dd2e3 docs(vectordata): explain the recall regime and low-cardinality degradation in the remote access guide
A filtered ground truth is only as deep as each predicate's match set, so a selectivity ladder cut for a full dataset walks off the bottom of a small slice and pads its rows with sentinels; the strict recall then caps at the profile's ceiling however well the search does. The guide derives that ceiling, tabulates the three measured runs, and states the regime: survey the ground truth before loading, report the attainable measure beside the strict one, and choose the profile by what the survey says it can pay out.
2026-09-16 07:16:51 +00:00
Jonathan Shook b4bfb22800 feat(cqld4): gate the predicated search on attainable recall and report it beside the strict measure
The workload surveys its ground truth in its derived parameters and refuses to run below min_attainable (default 0.95; 0 for a smoke run), and its verifier reports recall_attainable beside recall. The adapter docs state the regime: survey before loading, report the attainable measure beside the strict one, and choose the profile by what the survey says it can pay out, since selectivity times base count is only a first guess.
2026-09-16 07:04:49 +00:00
Jonathan Shook 6ae106a5eb feat(virtdata): survey a ground truth's attainable recall before anything is loaded
groundTruthCoverage reads the ground-truth facet alone and reports how many queries have all k neighbors, how many have none, and the recall@k ceiling a perfect search would score. requireAttainableRecall refuses a run below a threshold before a million rows are loaded for a number that could never be read, naming the ceiling and the profiles that would read. On tessera, 100k mixed ceils at 0.1428, 300k-uniform-2-1e-3 at 0.988, and 1m-uniform-2-1e-3 at 1.0.
2026-09-16 07:04:49 +00:00
Jonathan Shook 085e545787 feat(engine): measure recall against the neighbors that exist
A filtered ground truth pads a query whose predicate matches fewer than k rows with sentinels no search can return, and the strict recall divides by k regardless, so a small slice reads low by construction. attainable_recall leaves the sentinels out of the denominator: the share of the neighbors that exist which were found. A row with nothing attainable scores 1.0; how many such rows there are is a fact about the ground truth, not the search.
2026-09-16 07:04:49 +00:00
Jonathan Shook d557669a80 docs(vectordata): record the 2.1.2 baseline, selectors, and version 3
The compatibility contract moves to the reference's 33fedae commit and states the absent-version rule, stated parents, the derived axis, the tag schema, the selector grammar and cardinality, the group prebuffer, and the remaining representation differences. The README documents selecting profiles and the version-3 layout.
2026-09-16 01:40:42 +00:00
Jonathan Shook 28ac06286c feat(vectordata): prebuffer the profiles a selector names
A group prebuffers the named profiles in the order a set selector resolved to, each facet against its declared window through the same planner, after tallying the announced total and reporting it as a large download at 250 MiB. One view per profile serves both the tally and the fetch, so the offset index a plan loads is the one the prebuffer uses.
2026-09-16 01:40:42 +00:00
Jonathan Shook b6ddfcc575 feat(vectordata): select profiles by selector on the group and catalog surfaces
A group answers what a selector reads of every profile, structure as loaded after inheritance and attributes its own, in size order: default first, then by base_count or the name read as a count, then naturally by name. A catalog open takes a selector and refuses a set, openProfiles returns the set, openProfile splits a spec by its head's shape, and a catalog entry resolves the same selection from its listed layout before anything is fetched, exposing the listed format version.
2026-09-16 01:40:28 +00:00
Jonathan Shook 9f3efebe85 feat(vectordata): read format version 3 and hold an absent version to 1
Version 3 is stated parents and a profile tag schema: every profile but default names a real parent or the load is refused naming the profiles involved, and the schema loads in naming order. An unversioned manifest is read as the least it could be and refused, naming the version to declare, when its content needs more. The axis of an inheritance step is derived from base_count rather than the parent's name: base facets are re-cut to the child's count, the per-size outputs, metadata_results now among them, do not cross a size step, and base_count and maxk inherit as the reference's do. A parent YAML reads as a number is the name it spells. Test fixtures that declare a series now state version 2.
2026-09-16 01:39:58 +00:00
Jonathan Shook 4a1f6a4d06 feat(vectordata): parse profile selectors and split a spec by its head's shape
The reference's one selector parser: the grammar, the value readings by spelling, the structural keys, list and map matching, case folding, and the set and single-profile resolution rules with their messages. A spec's head is found by shape, so a URL's port and a selector's colon are told apart. A regular expression outside the RE2 subset is refused rather than accepted here and rejected there.
2026-09-16 01:39:58 +00:00
Jonathan Shook 97de9ab974 feat(vectordata): report a uniform series' shard count on its descriptor
A series has no single source path, and a caller reporting what opening the facet will cost needs the number without realizing the series first.
2026-09-16 01:39:58 +00:00
Jonathan Shook a3753e205d feat(vectordata): read manifests under the YAML 1.2 core schema
The engine's default JSON schema reads a tilde as the string it spells; the reference writes a naming tag in a profile_tags schema as a tilde, and reads under the core schema, where it is null.
2026-09-16 01:39:58 +00:00
dependabot[bot] c54d1df5c1 build(deps): bump io.netty:netty-handler in /mvn-defaults
Bumps [io.netty:netty-handler](https://github.com/netty/netty) from 4.2.15.Final to 4.2.17.Final.
- [Release notes](https://github.com/netty/netty/releases)
- [Commits](https://github.com/netty/netty/compare/netty-4.2.15.Final...netty-4.2.17.Final)

---
updated-dependencies:
- dependency-name: io.netty:netty-handler
  dependency-version: 4.2.17.Final
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-08 19:17:22 +00:00
Jonathan Shook 0b7ebc12a9 docs(cqld4): state the predicate forms and load guidance in the predicated workload
Derive the form survey into the description, note that the rampup
must be throttled against a single small node since an overloaded node
drops mutations that errors=count only counts, and say which of the
nine indexed columns carry the predicates so a lighter variant is an
informed choice.
2026-09-05 04:28:25 +00:00
Jonathan Shook 6d6906545b feat(virtdata): survey a predicate facet's forms before the first cycle
PredicateClause reads every predicate once when it is built,
initializes each distinct shape then, and reports the forms on the
console with the number of predicates of each, so how many prepared
statements a run will hold is known before it starts. A shape that
cannot be prepared is reported with the others and refused after the
survey rather than on the cycle that would have met it. The
predicateForms expression takes the same survey quietly for a
workload's description.
2026-09-05 04:28:25 +00:00
Jonathan Shook c36c6933f1 feat(cqld4): drive the predicated search through prepared forms
The predicate's structure is reified through the template: the
predicate bind point takes a fragment, the adapter prepares one
statement per predicate shape keyed by its fingerprint, and the
comparands bind as parameters typed from the metadata fields. The
rendered form stays available through RecordText for a driver that
cannot prepare.
2026-09-05 00:15:52 +00:00
Jonathan Shook dc9626d4b8 feat(cqld4): prepare a statement once per form when a bind value is a fragment
When a bind point of a prepared op yields a fragment, its text takes
the bind point's place in the statement and its values take the place
of that bind value. The space holds one prepared statement per op and
form key, prepared the first time the form is seen; a cycle without a
fragment takes the single-statement path unchanged. A template with one
fragment is keyed by the fragment's own key, so a cycle allocates no
key.
2026-09-05 00:15:52 +00:00
Jonathan Shook e28599af18 feat(virtdata): prepare each predicate shape once as a fragment
PredicateClause turns each predicate into a prepared fragment: the
shape's WHERE clause with a marker per comparand, the comparands typed
from the metadata fields they constrain, and the fingerprint as the
form key. A form is initialized once, its clause composed and its
binder compiled on the first predicate of that shape, and every later
cycle of the shape costs the record read, the fingerprint lookup, and
the value projection.
2026-09-05 00:15:52 +00:00
Jonathan Shook 19bee2506d feat(vectordata): bind an already-decoded predicate through its binder
A caller that decodes a record itself, to read its fingerprint and pick
one binder per shape, binds the node directly with the same shape check
rather than decoding twice; the binder also names the shape it was
compiled against.
2026-09-05 00:15:52 +00:00
Jonathan Shook 7a7928b4e9 feat(virtdata): reify a per-cycle statement form as a prepared fragment
A bind value that is part statement and part parameters: text with
positional markers, the values for them, and the key of the form the
text has. Equal keys mean equal text, so an adapter prepares each form
once and binds every later fragment of that form through it.
2026-09-05 00:15:52 +00:00
Jonathan Shook cdbd9409e4 docs(vectordata): show the rendering mapper in the remote-access guide 2026-09-05 00:02:51 +00:00
Jonathan Shook 9e4ab0490b feat(cqld4): add a predicated vector search workload over a vectordata profile
Every dataset-shaped parameter is derived from the profile: the table's
metadata columns from the record layout, dimensions and k from the
facets, the similarity from the attributes. Rampup binds each base
vector with its metadata record field by field through a prepared
insert; search runs each query under the predicate published for it,
rendered as a WHERE clause since the predicates differ in shape, with
SAI indexes on every column they reference, and verifies against the
pre-filtered ground truth, padding a short result set the way the
ground truth pads a short match set.
2026-09-05 00:02:51 +00:00
Jonathan Shook 166d297bde feat(virtdata): render records and derive CQL columns from a layout
RecordText renders each record of a facet in a named vernacular — the
rendering contract beside the binding one, for a statement whose shape
changes per cycle. CqlColumns derives CQL column definitions from a
record layout, typed from the bind types so the columns accept what the
binders produce, and the recordLayout, recordFields, and recordColumns
expression functions expose the layout to a workload at load time.
2026-09-05 00:02:51 +00:00
Jonathan Shook d461f5831b fix(vectordata): render a CQL conjunction without grouping parentheses
A CQL WHERE clause is a bare list of relations and Cassandra rejects a
conjunction wrapped in parentheses, which is what the reference's CQL
vernacular emits. Render the bare form for CQL, keep the grouping for
SQL and for the != and OR rewrites, and record the deviation in the
contract for upstream reconciliation.
2026-09-05 00:02:51 +00:00
Jonathan Shook 0a6c01031c docs(vectordata): show the record-binding functions in the remote-access guide
Add the four record mappers to the inline op examples and say why they
take no prefetch mode: a slab is paged, so a record fetches its page.
2026-09-04 23:34:00 +00:00
Jonathan Shook 62b49e8a52 feat(virtdata): bind vectordata records as projective functions
Four mappers over a facet of opaque records, each learning the layout
once and resolving no field name per cycle: RecordField projects one
field to the Java value its wire type says, RecordFields binds a record
to named values in bind order, RecordForm binds under a form the facet
declares, and PredicateParams binds a predicate's comparands as
parameters typed from the metadata fields they constrain. The shared
projection maps bind types to driver-ready Java values, reading varint
and decimal payloads as big-endian two's complement.
2026-09-04 23:34:00 +00:00
Jonathan Shook e0331a9e46 build(vectordata): compile at the reactor's Java 25 standard
Drop the module's own release override, the only Java-level pin in the
reactor, so it inherits the 25 standard every other module builds at.
2026-09-04 23:34:00 +00:00
Jonathan Shook 9bb45d0777 docs(vectordata): describe record binding in the contract
State the binding contract and the bind-type asymmetry, replace the
note that binding forms are out of scope with the three deviations that
remain — field views as objects, form extras as node values, and the
raw predicate scanner not ported — and show the cycle loop.
2026-09-04 22:50:06 +00:00