Prepare NumPy Vector Store 0.6.0 for release - #25
Merged
Conversation
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.
What this PR does
This PR prepares NumPy Vector Store 0.6.0 for release after the four implementation PRs in the milestone. It sets the package version, adds a complete release narrative, marks the roadmap milestone complete, and updates the README so its compatibility and benchmark provenance describe the code that will actually ship.
The release itself is about predictable contracts rather than a new feature family. It makes scalar inputs explicit, validates search preconditions consistently regardless of store size, clarifies persistence path and failure behavior, protects format-version-1 compatibility with a real published archive, and replaces informal performance claims with reproducible evidence.
Why this release matters
Before 0.6, some invalid calls were accepted through Python or NumPy side effects. A boolean could behave like an integer count or row index, malformed search filters could be skipped when a store was empty, and configuration accepted through truth-value coercion could change meaning after a save/open round trip. Those cases made behavior depend on incidental implementation details rather than the public API.
Version 0.6 establishes one understandable rule at the boundary: supported values are converted to a canonical form, inappropriate types raise
TypeError, supported types with invalid values raiseValueError, and row selector bounds raiseIndexError. Exact message text remains explanatory rather than becoming a compatibility promise.This is also the point where the project can state its intended scale more honestly. NumPy Vector Store remains a small-to-medium, in-process exact-search tool. The README stops its aligned benchmark grid at 100,000 rows and explains why routinely million-row workloads generally need an indexed or service-backed system.
Release contents
Predictable public inputs
dimensions,top_k, andget(index)accept integer-index values and reject Python and NumPy booleans.normalizeaccepts Python and NumPy booleans and retains a canonical Pythonbool.within_rowsis always checked for one-dimensional shape, integer values, uniqueness, and bounds, including on an empty store.Persistence contracts
save()paths distinct fromsave("").Reproducible performance evidence
4b23810on a 24 GB Apple M4 Mac mini. The documented cosine-search range is about 0.032 ms per query at 1,000 rows × 384 dimensions through 20.509 ms at 100,000 rows × 3,072 dimensions.Release documentation and metadata
0.6.0.maincommit and its measurements.User impact and upgrade guidance
Valid, documented 0.5 usage should continue unchanged. The release adds no public class, runtime dependency, exception hierarchy, metadata query language, archive format, or persistence migration.
Applications should review call sites that pass booleans where integer counts or indexes are expected, fractional
top_kvalues, string or boolean thresholds, duplicate or malformedwithin_rowsvalues, zero queries that were only attempted against empty stores, or explicitly empty persistence paths. Those accidentally accepted or state-dependent inputs now fail consistently at the public boundary.Python 3.11 through 3.14 and NumPy 1.23.2 or newer remain supported. Python 3.10 remains supported by the 0.3 release series, not by 0.4 or later.
Verification
uv lock --checkruff check .ruff format --check .mypy src/ benchmarks/Release notes
This PR does not create a tag or publish a package. After it is squash merged,
v0.6.0should be attached to the exact resultingmaincommit and published as a GitHub release. The existing release workflow will rerun the supported checks and publish the distributions to PyPI through trusted publishing.