Pinecone
We upserted the same vector id three times, simulating dropped-response retries. The stored count went from 2 to 3, not to 5 - each retry overwrote instead of duplicating, and reading it back returned a single record. Retrying is safe by design. The rest is clean too: one call creates an index, a wrong-type field is a self-correctable error, an index/upsert/query flow chains cleanly, and a dimension mismatch is a precise 'Vector dimension 3 does not match the dimension of the index 4'.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
Here’s the receipt — what actually happened, not our summary of it.
totalVectorCount 2 -> upsert the same id 'dup1' x3 (each upsertedCount 1) -> totalVectorCount 3 (only +1, not +3); fetch 'dup1' returned a single record. Upsert is overwrite-by-id, so it is naturally idempotent - a dropped-response retry can't duplicate.
See everything the AI did (5 steps)
t0 Claude Opus 4.8 POST /indexes (cold-start) → 201 (host returned) t1 Claude Opus 4.8 POST /indexes (dimension='four') -> corrected → 422 expected u32 -> 201 t2 Claude Opus 4.8 POST /indexes -> upsert(host) -> query(host) → chain ok (upsertedCount 2, query hit) t3 Claude Opus 4.8 upsert 3-dim vector into 4-dim index → 400 dimension mismatch t4 Claude Opus 4.8 upsert same id dup1 x3 then fetch → count +1 only, single record (idempotent)
Tested 2026-06-27 with Claude Opus 4.8 agents · request a re-test