Retrieval-augmented systems are already vulnerable to poisoned documents that enter the knowledge base and mislead the model, which is why detection work like CleanBase treats the knowledge database as a hostile-input boundary rather than a trusted store. A quarantine table applies the same reasoning at ingestion time: any chunk that fails a filter lands somewhere it cannot be retrieved from, and a human decides what happens next.
Tinybird's quarantine pattern is a useful reference. Rows that do not match a data source schema are routed automatically to a {datasource_name}_quarantine table so ingestion does not fail, and reviewers can inspect them with plain SQL before fixing the upstream schema and recovering the rows back into the main source (Tinybird quarantine docs). Chunk pipelines need the same three properties: ingestion never blocks, the rejected data is queryable, and recovery is a deliberate operation.
Keeping quarantine as a boolean on the main chunks table fails on all three counts. One bad WHERE clause in a retrieval query, one missing filter in an embedding backfill, and rejected text is back in the vector index. A separate table makes accidental inclusion a schema mistake rather than a query mistake.
There is also a compliance argument. A data retention policy defines what data you keep, how long, where, and how it is deleted, and retaining data longer than necessary increases breach exposure, storage costs and legal liability (Drata retention guide). Quarantined chunks are frequently the most sensitive text in the system (they are the ones that tripped a filter), so they deserve the tightest clock in your pipeline, and a dedicated table makes that clock enforceable.



