HNSW fixes:
- Extract vector dimensions from column atttypmod instead of hardcoding 128,
which caused corrupted indexes for non-128-dim embeddings (#171, #164)
- Add page boundary checks in read_vector/read_neighbors to prevent
segfaults on large tables with >100K rows (#164)
- Use BinaryHeap::into_sorted_vec() for deterministic result ordering
instead of into_iter() which yields arbitrary order (#171)
- Handle non-kNN scans (COUNT, WHERE IS NOT NULL) gracefully by returning
false from hnsw_gettuple when no ORDER BY operator is present (#152)
Agent/SPARQL fixes:
- Fix SQL type mismatch: ruvector_list_agents() and
ruvector_find_agents_by_capability() now use RETURNS TABLE(...)
matching the Rust TableIterator signatures instead of RETURNS SETOF jsonb (#167)
- Add empty query validation to ruvector_sparql() and
ruvector_sparql_json() to prevent panics on invalid input (#167)
- Change workspace panic profile from "abort" to "unwind" so pgrx can
convert Rust panics to PostgreSQL errors instead of killing the backend (#167)
Security:
- Bump lru dependency from 0.12 to 0.16 in ruvector-graph, ruvector-cli,
and ruvLLM to resolve GHSA-xpfx-fvgv-hgqp Stacked Borrows violation (#148)
Version bumps: workspace 2.0.3, ruvector-postgres 2.0.2
Co-Authored-By: claude-flow <ruv@ruv.net>