If chunk identifiers are generated randomly at ingestion, running the pipeline twice inserts a second copy of every chunk. The index still answers queries, but the top results are now near-duplicates, the effective diversity of retrieved context collapses, and the model receives the same passage several times.
Derive the identifier from stable inputs: a hash of the source document identifier, the chunk index within the document, and the chunk text. Then re-ingestion is an upsert. Chunks whose text changed get a new identifier and the stale ones are removed by a sweep on document identifier, which requires storing the source document identifier as metadata on every chunk.
The related failure is deletion. A document removed from the source system leaves its chunks in the index forever unless something reconciles them, so the system confidently cites content that no longer exists. Track document identifiers and run the reconciliation as part of the ingestion job, not as a manual cleanup.