
How Unspoken Words Enter AI Meeting Transcripts
A fluent transcript can contain words nobody said. Preserve the recording, inspect silent spans and separate draft text from statements that become meeting evidence.
Read MoreZharfAI Team

A search team replaces an embedding model because the candidate is cheaper and performs better on a public leaderboard. Both models emit 1,024 numbers, so the team overwrites vectors in the existing index as a background job. During the job, a new-model query meets a mixture of old- and new-model document vectors. Results remain syntactically valid, latency looks normal, and no database alarm fires. Relevance quietly becomes arbitrary.
The reader decision is: should this change be an offline rebuild, a parallel blue-green index, or a second named vector—and what evidence permits cutover? The answer depends on recoverability, live mutation rate, consequence, storage headroom, and whether the platform can route one complete vector space atomically.
The central rule is: an embedding is meaningful only inside the exact coordinate system that produced it. Never expose a search request to a partially migrated space. Preserve the source corpus, give each complete space an immutable epoch, evaluate the whole retrieval system, switch queries deliberately, and retain a tested rollback path.
An embedding system turns content into coordinates, but the effective mapping includes more than a provider and model label:
| Contract element | Examples of a change that creates a new epoch |
|---|---|
| Encoder artifact | model, revision, weights, hosted endpoint behavior |
| Encoding mode | query versus document task, instruction prefix, language mode |
| Representation | vector dimension, normalization, numeric precision |
| Corpus transform | parser, OCR, redaction, chunk boundaries, overlap, field selection |
| Search geometry | cosine, dot product, Euclidean distance, hybrid fusion |
| Index behavior | exact versus approximate search, quantization, HNSW or IVF parameters |
| Eligibility | tenant, access-control, time, jurisdiction, document-status filters |
| Score policy | threshold, reranker, diversity rule, number of candidates |
Google's current text-embedding documentation illustrates why representation details matter: it identifies a model's dimensionality and says its output is normalized, which makes several distance functions produce the same ranking for that output. That is a property of the documented output, not permission to assume that every model, reduced dimension, or local transformation shares it.
Equal dimensions do not establish compatible coordinates. A query encoded by model B cannot be compared meaningfully with documents encoded by model A merely because both arrays fit the same database field. Changing only chunking is also a new corpus epoch: the vector may use the same model, but it represents a different evidence unit with different identifiers and citation boundaries.
The production patterns are unusually concrete. Qdrant's embedding-model migration guide describes parallel collections with dual writes and alias cutover, or an added named vector followed by backfill and query switching. It also warns that deletes and partial updates need special treatment in a blue-green flow. Weaviate's vectorizer migration tutorial similarly starts with a representative baseline, evaluates the candidate on identical data, and presents collection aliases as the usual reversible production method.
Research supports contextual evaluation, not a universal winner. The 2023 MTEB paper evaluated 33 models across eight task families and found no single embedding method dominated all tasks. NIST's valid-and-reliable guidance says accuracy measurements should use clearly defined, realistic test sets representative of expected use, with documented methodology.
Those sources do not mandate the epoch receipt, cutover gates, or reconciliation ledger below. Those are ZharfAI analysis: a vendor-neutral operating pattern derived from the documented migration mechanics, vector behavior, and evaluation principles.
| Shape | Use when | Main advantage | Main risk |
|---|---|---|---|
| Offline rebuild | Search can stop; corpus is small and fully reconstructable | Simplest consistency story | Downtime and a compressed verification window |
| Parallel collections | Service stays live; schema, chunks, dimensions, or filters change | Strong isolation and instant routing rollback | Duplicate storage and mutation reconciliation |
| Second named vector | One object/payload schema remains valid and the store supports independent named spaces | Less payload duplication; side-by-side queries | Shared-object lifecycle can hide incomplete vector coverage |
| In-place overwrite | Only for a disposable, offline index rebuilt atomically before exposure | Low temporary storage | Mixed-space search, weak rollback, hard-to-see partial failure |
Treat in-place mutation as the exception, not the cheap default. If the router cannot prove that all queries and all documents use one epoch, it is not a safe live migration.
This complements the RAG knowledge-quality guide: source authority and citation quality still matter, but a migration adds the separate obligation to preserve retrieval geometry and evidence-unit identity.
A vector store should not be the only surviving copy of what was embedded. Keep an authoritative source record or immutable content object plus enough transformation evidence to reproduce each searchable unit:
{
"source_id": "policy-184",
"source_version": "sha256:...",
"chunk_id": "policy-184/v7/section-12",
"content_hash": "sha256:...",
"parser_version": "pdf-pipeline-9",
"chunker_version": "semantic-480-v3",
"redaction_policy": "privacy-6",
"tenant_id": "tenant-42",
"acl_version": "acl-991",
"source_sequence": 38104,
"deleted": false
}
Stable source identity and version-specific chunk identity solve different problems. source_id links editions of a document; chunk_id names the exact evidence unit returned to the answer layer. A content hash detects transformation drift. A monotonically increasing source sequence or comparable version check prevents an old backfill worker from overwriting a newer live update.
Keep tombstones until both spaces have observed them. A migration that re-creates a deleted document from a stale batch is a privacy and correctness failure, even if retrieval metrics improve.
Create an epoch record before writing the first target vector:
embedding_epoch = emb-2026-08-b
encoder = provider/model@immutable-revision
mode = document | query
dimensions = 1024
normalization = l2
distance = cosine
numeric_type = float32
parser = pdf-pipeline-9
chunker = semantic-480-v3
index = hnsw(m=..., ef_construction=...)
filters = tenant-acl-time-v5
reranker = rerank-contract-v4
Attach the epoch to document vectors, query encoding, index configuration, evaluation reports, and retrieval receipts. Refuse a query when the router's query epoch differs from the selected collection or named vector. Do not silently fall back to “whatever vector exists.”
Elasticsearch's dense-vector reference documents distinct similarity semantics and accuracy/speed tradeoffs in approximate index settings. The receipt therefore needs search geometry and index parameters, not only the encoder. It should join the broader AI release passport, but remain query-visible so operators can prove which retrieval epoch answered a request.
The safe choreography is a state transition, not “run a re-embed script”:
Qdrant's guide distinguishes safe point deletion in its named-vector approach from operations that need pausing or extra logic in a parallel collection. Generalize that warning: enumerate every mutation verb your system actually supports. Upsert-only dual writing is not consistency if editors can delete payloads, alter access lists, merge documents, or change tenant ownership elsewhere.
Build a frozen migration set from real, permitted operating traffic. Include frequent queries, rare intents, Persian and English, short and long questions, entity-heavy requests, time-sensitive material, access-filtered cases, expected no-result cases, and known incidents. Keep sensitive queries protected and use accountable human judgments or verified downstream outcomes.
Measure layers separately:
| Layer | Useful measures | Question answered |
|---|---|---|
| Candidate generation | recall@k, nDCG@k, no-result rate, filter survival | Did relevant evidence enter the candidate set? |
| Approximate index | overlap with exact top-k, recall loss by segment | Did acceleration change which neighbors were found? |
| Reranking | pairwise wins, top-k relevance, diversity | Did ordering improve after candidate generation? |
| Answer system | citation support, answerability, abstention, task outcome | Did retrieval improve the reader's result? |
| Operations | p50/p95/p99 latency, index size, build time, cost | Is the target sustainable? |
The pgvector project documentation states that approximate indexes trade recall for speed and recommends monitoring recall against exact search. This matters during migration: a model improvement can be cancelled by more aggressive quantization, a smaller candidate budget, or different filtering behavior. Compare exact old versus exact new first; then measure each production index against its exact counterpart.
Do not carry score thresholds across epochs. Cosine 0.78 in one space does not inherit the same meaning in another. Recalibrate accept, rerank, ask-for-more-evidence, and abstain thresholds on target-epoch distributions and consequences.
For an allowed sample of production queries, encode and search both epochs. Return only the current result; store a privacy-reviewed comparison record containing epoch IDs, candidate identifiers, ranks, latency, applied filters, and judgment status. Do not duplicate downstream tool calls or user-visible actions.
Segment the comparison. Aggregate wins can conceal a collapse in Persian retrieval, one tenant's product names, fresh documents, or long-tail policy questions. NIST's AI RMF Measure Playbook calls for documented test sets and methods, assessment of external validity, and renewed metrics as operating conditions or models change. A migration report should therefore state where evidence is strong, weak, or absent.
Shadowing also exposes operational differences: query-encoder throttling, cold caches, tail latency, missing ACL fields, and target freshness. A relevance win that cannot meet the service budget is not yet a release.
Consider a hypothetical assistant searching five million Persian and English policy chunks. The team wants a new multilingual encoder and a revised chunker. Because both representation and evidence boundaries change, it chooses parallel collections.
The source table assigns every document version a sequence and keeps delete tombstones. The target collection stores new chunk IDs, the target epoch, content hash, language, tenant, ACL version, and effective time. A change stream begins at sequence 38,104; the backfill handles older state, while conditional live writes win over stale batches.
The evaluation set contains 1,200 adjudicated queries: 400 Persian, 400 English, 200 cross-language, and 200 access-filter/no-answer cases. The team compares exact retrieval first, tunes the target approximate index second, then runs a one-week shadow. The candidate raises overall nDCG but loses recall for Persian legal citations and newly updated documents. Cutover is blocked. Investigation finds inconsistent Persian normalization and a lagging ACL/change stream. Both are repaired and the complete evaluation rerun.
At cutover, one router configuration changes query_epoch and collection_alias together. Each retrieval receipt records both. The old collection continues receiving mutations for seven days. Rollback is a route reversal, not an emergency re-embedding job.
The numbers are illustrative, not a ZharfAI deployment or a universal threshold. The lesson is the order of proof: completeness, access parity, exact retrieval, approximate retrieval, downstream outcome, operations, then cutover.
| Symptom | Hidden cause | Gate that catches it |
|---|---|---|
| Normal latency, strange relevance | mixed query/document epochs | hard epoch equality check |
| Good global metric, weak Persian results | unsegmented evaluation | language and intent slices |
| Target count matches source | deleted records were resurrected | tombstone and sequence reconciliation |
| Offline recall improves | ANN tuning lost the gain | exact-to-approximate comparison |
| Answers look fluent | citations point to changed chunk boundaries | source-version and chunk receipt |
| Easy rollback exists on paper | old index stopped receiving updates | rollback drill plus freshness SLO |
| New model wins leaderboard | operating queries differ from benchmark | representative task evaluation |
| Results disappear under filters | approximate search and ACL interaction changed | filtered recall and eligibility parity |
Public embedding benchmarks are useful for candidate discovery. They are not acceptance tests for a corpus, language mix, access policy, or downstream answer contract.
Before switching, require evidence for all of the following:
This also extends the recovery-cut architecture: backups are insufficient if source content, transformation versions, query encoder, index, filters, and router cannot be restored as one compatible retrieval state.
Watch target-only signals and old-versus-new deltas: zero-result rate, retrieved-language mix, stale-document rate, access-filter drops, exact-to-ANN recall sample, citation support, abstention, user correction, latency tails, encoder errors, index saturation, and cost per successful task. Keep the evaluation set alive with newly adjudicated failures; do not quietly rewrite old labels to make the release look better.
End the rollback window by decision, not by storage pressure. First prove that the target has survived normal load, rare queries, content churn, deletes, access changes, and at least one rollback exercise. Then stop old-epoch writes, take a protected final snapshot if policy permits, document residual uncertainty, and remove the old index under change control.
The durable principle is simple: preserve the source, name the whole space, compare like with like, and switch the route—not individual coordinates.

A fluent transcript can contain words nobody said. Preserve the recording, inspect silent spans and separate draft text from statements that become meeting evidence.
Read More
A practical contract for deciding which AI functions may continue, degrade, wait, transfer to people, or stop when a model or dependency becomes unhealthy.
Read More
A practical change-control architecture for deciding what must be versioned, tested, canaried, and restored together when an AI system evolves.
Read MoreIf this note maps to a real system in your organisation, start with the services page or a shipped case study.