The canary loop
Executability tells real code from hallucinated code, but not whether an exploit actually works. Fixtures close that gap. The verifier stands up a disposable vulnerable target, seeds a fresh random canary into it, runs the exploit against it, and calls the result FUNCTIONAL only if the exploit’s output contains that canary. The target runs on an internal network with no path to the internet, and the canary is a per-run secret the model cannot know. So a landed exploit is proof, not a guess.Built-in targets
Each target exposes the canary only through its vulnerability, so a benign request returns PARTIAL and only the real exploit returns FUNCTIONAL.
Using a fixture
target. The fixture images live under fixtures/ in the repo and build with a plain docker build.