fix: #995 #984 #968 #988 + publish hardening; ruvector 0.3.3, graph-node 2.1.1 - #1014
Merged
Merged
Conversation
…iagnostic (#1009) router-core's dot_product returns -(a·b), so smallest-distance-first search is a maximum-inner-product search. The kge diagnostic negated the query again and so searched for the minimum inner product (recall@10 = 0.000). Passing the query unchanged measures recall@10 = 1.000 on the same table; the ignored diagnostic is now a gate (dotproduct_recall_matches_mips) and the module docs are corrected. Co-Authored-By: claude-flow <ruv@ruv.net>
…ads (#995) The MCP server kept its own Intelligence copy that #698 did not touch: save() used a plain writeFileSync (torn reads by concurrent hook processes) and load() swallowed parse errors into empty defaults. Save now goes through temp file + rename; a corrupt store is renamed to .corrupt-<epoch> and reported on stderr. Unlike the CLI the long-lived server starts empty instead of refusing to start; the original bytes are preserved for restore. Adds test/mcp-intel-durability.js. Co-Authored-By: claude-flow <ruv@ruv.net>
createEdge and batchInsert built edge properties from only __confidence and __embedding, dropping the documented metadata map. Metadata is now stored as string properties, returned by query() and kept across reopen. Internal __ keys are inserted last so caller metadata cannot override them. Co-Authored-By: claude-flow <ruv@ruv.net>
…UF (#968) The command never loaded tensors: SafeTensors/PyTorch input produced a 75-byte header declaring zero tensors and GGUF input an empty file, both reported as success. Until a GGUF tensor writer exists, quantize validates its arguments and errors before creating any output, pointing at llama.cpp / candle. Co-Authored-By: claude-flow <ruv@ruv.net>
Co-Authored-By: claude-flow <ruv@ruv.net>
… on npm (#1007) build-graph-node.yml had the same swallowed-failure pattern #1007 removed from build-router.yml: publish-platforms.js caught publish errors and skipped missing binaries, and the main publish ended in || echo. Missing binaries and failed publishes now fail the job, already-published versions are skipped explicitly, and both workflows poll the registry until every package version resolves. Co-Authored-By: claude-flow <ruv@ruv.net>
Co-Authored-By: claude-flow <ruv@ruv.net>
This was referenced Sep 23, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
dot_productalready returns-(a·b); the kge diagnostic negated the query a second time (recall@10 0.000). With the query unchanged, recall@10 = 1.000. The ignored diagnostic is now a gate (dotproduct_recall_matches_mips) and the kge docs are corrected. router-core is unchanged.mcp-server.jssavesintelligence.jsonvia temp file + rename. A corrupt store is quarantined to.corrupt-<epoch>and reported on stderr instead of silently becoming empty. The server starts with an empty store rather than refusing to start, which is deliberate for a long-lived process; the original bytes are preserved. Newtest/mcp-intel-durability.js.createEdge/batchInsert/createHyperedgenow persistmetadata, which is returned byquery()and survives reopen. Internal__keys cannot be spoofed by metadata. New Rust test.ruvllm quantizefails closed (no output file) instead of writing a 75-byte / empty GGUF. The real writer is still to do, so #968 stays open.fast-uri3.1.7 → 3.1.8 innpm/package-lock.json.npm auditno longer flags it. Other #988 items stay open.build-graph-node.ymlhad the same swallowed-publish pattern: missing binaries were skipped,catchswallowed errors, and the main publish ended in|| echo. It now fails the job and verifies every package on the registry.ruvector-publish.ymlgains a post-publish registry check.Release:
ruvector0.3.3,@ruvector/graph-node2.1.1 (graph-node platform packages are published from this branch first so the optional-deps guard can resolve them, same as 2.1.0).Validation
cargo test -p ruvector-graph-node --lib22/22,-p ruvector-kge61/61,-p ruvector-router-core22/22,-p ruvllm-cli quantize4/4cargo fmtandclippy --all-targetsclean on touched cratesnpm/packages/ruvectortests: 13/16 pass locally. The 3metaharness-*failures come from the local environment (optional@metaharness/*peers not installed); CI installs them.mcp-server.js🤖 Generated with claude-flow