- Rewrote hnsw_am.rs to fix pgrx 0.12 API compatibility:
- Use raw pg_sys::Relation instead of PgRelation wrapper
- Use palloc0 + Internal return type for handler function
- Fix ScanDirection and IndexUniqueCheck type paths
- Use RelationGetNumberOfBlocksInFork to check if index exists
- Use P_NEW (InvalidBlockNumber) for allocating first page
- Define static HNSW_AM_HANDLER template for IndexAmRoutine
- Enabled hnsw_am module in index/mod.rs
- Re-enabled HNSW access method SQL declarations:
- hnsw_handler function
- CREATE ACCESS METHOD hnsw
- Operator families: hnsw_l2_ops, hnsw_cosine_ops, hnsw_ip_ops
- Operator classes with distance function bindings
CREATE INDEX ... USING hnsw now works with real[] columns.
Query planner uses HNSW index for ORDER BY <-> queries.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed 13 sparse vector function symbol names (ruvector_* -> pg_*)
pgrx exports C symbols from Rust function names, not `name = "..."` attribute
- Commented out non-existent GAT and GNN readout SQL declarations
- Disabled HNSW access method SQL (CREATE ACCESS METHOD, operator families,
operator classes) - requires pgrx API stabilization for full implementation
- Keep distance operators (<->, <=>, <#>) available as standalone functions
- Extension now loads successfully with 104 working SQL functions
Tested: Docker build succeeds, extension creates without errors,
core vector/graph/attention/routing functions verified working
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix package.json napi config (use binaryName/targets instead of deprecated name/triples)
- Update build script to use correct napi-rs CLI arguments
- Publish @ruvector/sona-linux-x64-gnu@0.1.3 platform package
- Publish @ruvector/sona@0.1.3 main package with Linux x64 native binary
- Update GitHub Actions workflow with improved build process
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Eliminate vector clone in insert() by searching first, then inserting
- Remove unused hybrid-search and filtered-search feature flags
- Bump versions: ruvector-postgres 0.2.2, @ruvector/postgres-cli 0.1.2
Performance: Insert operations now require zero vector copies for the common
case (non-empty index), reducing memory allocations in hot path.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add configurable max_layers (was hardcoded to 32)
- Add overflow protection for Node IDs
- Add #[inline] to hot path functions (calc_distance, search_layer, etc.)
- Optimize insert() with fast path for empty index (avoids clone)
- Improve typmod parsing with better error messages and null checks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix simsimd Option/Result type mismatch in scaled_dot.rs
- Fix f32/f64 type conversions in poincare.rs and lorentz.rs
- Fix AVX512 missing wrapper functions by using AVX2 fallback
- Fix Vec<Vec<f32>> to JsonB for pgrx pg_extern compatibility
- Fix DashMap get() to get_mut() for mutable access
- Fix router.rs dereference for best_score comparison
- Update Dockerfile to copy pre-written SQL file for pgrx
- Simplify init.sql to use correct function names
- Add postgres-cli npm package for CLI tooling
All changes tested successfully in Docker with:
- Extension loads with AVX2 SIMD support (8 floats/op)
- Distance functions verified working
- PostgreSQL 16 container runs successfully
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>