I wrote a test for prompt injection. It passed while the attack worked. A developer discovered that their CLI tool llm-council, which chains multiple language models, was vulnerable to prompt injection because the fence markers used to delimit untrusted content were fixed strings in a public repository. A test they had written for this exact vulnerability passed while the attack still worked, highlighting a subtle flaw: the test verified string concatenation but not whether the reader could be deceived. The developer fixed the issue by introducing a per-run random nonce to make the fence markers unguessable. This is a submission for DEV's Summer Bug Smash: Smash Stories powered by Sentry. I maintain a small CLI called llm-council https://github.com/MK023/llm-council . It puts one question to several models, hides the authorship, and has them rank each other's answers. I use it as an adversarial reviewer on my own work — the whole point is to get disagreement from something that has no reason to be polite to me. On 26 July I pointed it at its own repository. It found a prompt-injection hole in its own prompts. That was mildly embarrassing. What actually kept me up was the second finding: I had already written a test for exactly that hole, and the test was green. When you chain models, the output of one becomes the input of the next. In llm-council , stage 1 collects answers, stage 2 asks a model to rank them, stage 3 asks for a synthesis. Every stage feeds the previous stage's text — text written by an untrusted party — into a new prompt. That is OWASP LLM01 in its plainest form, and the standard mitigation is fencing: wrap untrusted content in delimiters and tell the reader that anything inside is quoted data, never instructions. I had done that. The delimiters looked like this: FENCE OPEN = "<<<{kind} {label} BEGIN " FENCE CLOSE = "<<<{kind} {label} END " Fixed strings. In a public repository. So a hostile voter — or a model that had simply read the repo during training — could write <<