Skip to content

Commit 11a19f5

Browse files
committed
Release v0.2.0
1 parent 1cebabe commit 11a19f5

6 files changed

Lines changed: 54 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,54 @@ All notable changes to VectorPin will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.0] — 2026-05-15
9+
10+
Promotes 0.2.0-rc.1 to a stable release with one additive change since
11+
the release candidate: a new pgvector adapter and `audit-pgvector` CLI
12+
command. No wire-format changes from rc.1; pins produced by rc.1
13+
verify on 0.2.0 and vice-versa.
14+
15+
### Added
16+
17+
- `PgVectorAdapter` (`vectorpin.adapters.pgvector`) — reads and writes
18+
pins on a pgvector-equipped Postgres table. Same shape as
19+
`QdrantAdapter` / `LanceDBAdapter`: `iter_records`, `get`,
20+
`attach_pin`, classmethod `connect(dsn, table, *, id_column='id',
21+
vector_column='embedding', pin_column='vectorpin')`.
22+
- `audit-pgvector` CLI subcommand mirroring `audit-{lancedb,chroma,
23+
qdrant}`.
24+
- `vectorpin[pgvector]` optional extra (`psycopg[binary]>=3.1` +
25+
`pgvector>=0.3`).
26+
- `scripts/pinecone_live_e2e.py` — self-contained manual verification
27+
script that creates a fresh Pinecone serverless index, runs the
28+
full sign-attach-verify round-trip via `PineconeAdapter`, exercises
29+
tamper rejection, and deletes the index on exit. Verified against
30+
live Pinecone (AWS us-east-1).
31+
- 22 new tests (`tests/test_adapter_pgvector.py`): 14 offline TLS-guard
32+
/ identifier-validation tests + 8 live integration tests that
33+
auto-discover the compose service via
34+
`VECTORPIN_TEST_PGVECTOR_URL` / `PGVECTOR_URL` env vars and skip
35+
cleanly otherwise.
36+
37+
### Hardening
38+
39+
- pgvector adapter applies the same security guards as the other
40+
remote-DB adapters: refuses plaintext postgres DSNs to non-loopback
41+
hosts without `sslmode=require` (or stronger), with the
42+
`VECTORPIN_ALLOW_INSECURE_HTTP=1` env-scoped escape hatch.
43+
- SQL identifier validation (`^[A-Za-z_][A-Za-z0-9_]*$`) on every
44+
interpolated name (table, id column, vector column, pin column),
45+
matching the LanceDB adapter's contract. Postgres has no
46+
parameterized form for identifiers, so this is the only line of
47+
defense against shell-style injection in those parameters.
48+
49+
### Notes
50+
51+
The pgvector adapter accepts both JSONB and TEXT pin columns — JSONB
52+
returns a decoded `dict` (parsed via `Pin.from_dict`), TEXT returns a
53+
`str` (parsed via `Pin.from_json`). Both routes go through the strict
54+
v2 schema validation.
55+
856
## [0.2.0-rc.1] — 2026-05-14
957

1058
Release candidate for 0.2.0. **This is a wire-format break.** Pins

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ abstract: >-
1414
post-embedding modification breaks signature verification on read. Reference
1515
implementations in Python, Rust, and TypeScript are byte-for-byte compatible,
1616
locked together by shared test vectors. Part of the ThirdKey Trust Stack.
17-
version: "0.2.0-rc.1"
18-
date-released: 2026-05-14
17+
version: "0.2.0"
18+
date-released: 2026-05-15
1919
keywords:
2020
- vector database
2121
- embedding store

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "vectorpin"
7-
version = "0.2.0rc1"
7+
version = "0.2.0"
88
description = "Verifiable integrity for AI embedding stores."
99
readme = "README.md"
1010
requires-python = ">=3.11"

rust/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ resolver = "2"
33
members = ["vectorpin"]
44

55
[workspace.package]
6-
version = "0.2.0-rc.1"
6+
version = "0.2.0"
77
edition = "2021"
88
rust-version = "1.75"
99
license = "Apache-2.0"

typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vectorpin",
3-
"version": "0.2.0-rc.1",
3+
"version": "0.2.0",
44
"description": "Verifiable integrity for AI embedding stores. TypeScript reference implementation.",
55
"license": "Apache-2.0",
66
"author": "Jascha Wanger / ThirdKey.ai",

0 commit comments

Comments
 (0)