feat: vector provider identity is a required name field (hnsw-js), rendered [vector-index:<name>]
All checks were successful
CI / Node 22 (push) Successful in 2m56s
CI / Node 24 (push) Successful in 2m58s
CI / Bun (latest) (push) Successful in 3m1s

Reconciles the vector-index rename to the ruled three-layer naming: the
provider contract's identity field is now a REQUIRED readonly name (was
optional providerId), self-reported and truthful, rendered as
[vector-index:<name>] where the index identifies itself and stamped into
the op-name strings journals already parse (AddToVectorIndex(<name>)).
The built-in JS engine names itself hnsw-js. A runtime provider instance
compiled against the previous optional contract is tolerated - never
crashed on, never silently mislabeled: it stamps unknown-provider and
emits one loud warning naming the missing field. Graph index operations
keep their static names (they never interpolate provider identity), and
no public API exports a provider-routed hnsw-carrying name, so no
deprecation shim is required.
This commit is contained in:
David Snelling 2026-07-23 08:53:05 -07:00
parent 16832671fb
commit ec57174760
6 changed files with 92 additions and 38 deletions

View file

@ -82,10 +82,20 @@ demand-load cost OFF the transaction path.
`AddToVectorIndex(...)`/`RemoveFromVectorIndex(...)` — the old names hard-coded an
algorithm that may not be the one actually running (a non-HNSW native vector provider
emitting `"RemoveFromHNSW"` has sent an operator hunting an index that doesn't exist).
The parenthesized suffix names the ACTIVE backend: `js-hnsw` for the built-in engine, or
The parenthesized suffix names the ACTIVE backend: `hnsw-js` for the built-in engine, or
the native provider's own identity when it self-identifies. **If you parse these op-name
strings** (log processors, journal tooling), update your matcher from
`AddToHNSW`/`RemoveFromHNSW` to `AddToVectorIndex(`/`RemoveFromVectorIndex(`.
- **Provider identity is now a REQUIRED `name` field** on the vector provider contract
(`VectorIndexProvider.name`, `src/plugin.ts`) — every implementation self-reports its own
identity truthfully (its algorithm/engine), never inheriting a default. It renders as the
op-name suffix above and, wherever the vector index identifies itself in prose log lines,
as the tag `[vector-index:<name>]`. **Native provider adoption is a one-line change**:
declare `readonly name = '<your-provider-name>'`. A provider instance that still lacks
`name` at runtime (an older native build compiled against the previous, optional field) is
never crashed on and never silently mislabeled: it stamps `unknown-provider` and emits one
loud warning naming the missing field, so the gap is discoverable instead of a permanent
fossil label in every journal line.
## v8.9.0 — 2026-07-19 (flush is durability-only: history maintenance moves to close())