A state licensing agency runs an assistant that lets applicants check the progress of a permit. It calls a case record lookup and places the returned record in the prompt. In the last fortnight, 0.4 percent of sessions produced replies naming another applicant's permit details. In every affected trace, the other applicant's record is already present in the prompt input, and that applicant shares a postcode with the person asking. The integration team added a response cache to the case record lookup 16 days ago, and the model and prompt are unchanged. The agency must name the root cause before the service reopens. What is the most likely cause?
- AThe model is carrying applicant details over from earlier sessions and recalling them when a postcode matches
- BThe system prompt lacks an instruction forbidding replies about other applicants, so the model volunteers their data
- CThe model is inventing plausible permit details from the postcode, which happen to match a real applicant's case
- DThe new cache is keyed too coarsely, so a lookup can return a record stored for another applicant at the same postcode Correct
Why A is wrong: Cross-session leakage feels like memory, so a model that remembers earlier users is an easy story to reach for. It is wrong because each request is processed from the input it is sent, with no recall of other sessions, and the trace already shows the other record arriving in the prompt from the lookup.
Why B is wrong: Adding a prompt rule is a quick change and would likely reduce how often the data is repeated, which makes it tempting. It is wrong as a root cause because the record should never have reached the prompt; an instruction is a compensating control that leaves another applicant's data flowing into every affected request.
Why C is wrong: Fabricated detail is a familiar model failure, so hallucination is a plausible first guess for unexpected content in a reply. It is wrong because the traces show the other applicant's actual record present in the input, so the model repeated real data it was given rather than generating it.
Why D is correct: The leaked record is in the prompt input, so it was fetched and inserted by the integration before the model ran. The cache is the one recent change on that path, the leaks began after it shipped, and the shared postcode suggests a cache key built from postcode or another field that does not identify a single applicant.