Surfaced by the 2026-06-29 maintenance audit (PR #2). A bundle of small, independent hardening/parity items — each safe to pick off individually.
Acceptance criteria
Each checkbox addressed (or consciously declined with a note). No behavior change required for the default happy path.
Surfaced by the 2026-06-29 maintenance audit (PR #2). A bundle of small, independent hardening/parity items — each safe to pick off individually.
/metricsis unauthenticated when enabled (src/server.ts, behindUPVECTOR_METRICS) — exposes request counts/latencies/configured metric to anyone who can reach the port. Document the expectation (network policy) or put it behind auth.src/embedding.ts) — the provider error message (sliced to 300 chars) is returned in the 502 body, leaking provider/model details. Genericize the client-facing message; keep detail in logs.IN (...)value-list has no element-count cap (src/filter/parser.ts) — only bounded byMAX_FILTER_LENGTH=8192. Add an explicit cap for defense-in-depth./randomignores include flags (src/routes/random.ts) — always returns{ id, vector }, never metadata/data. Not part of the SDK'sIndexsurface, so low impact, but the REST shape likely diverges from Upstash.Acceptance criteria
Each checkbox addressed (or consciously declined with a note). No behavior change required for the default happy path.