skeptic's eval harness (npm run eval) runs the real Prover-Skeptic-Judge pipeline against 16 labeled code fixtures and reports precision, recall, and F1 for the Prover alone versus the full three-stage pipeline - the number the README's "eliminates false positives" claim actually needs to hold up. It has never been run with a real key. No ANTHROPIC_API_KEY or GEMINI_API_KEY existed anywhere in this session, and I wasn't willing to publish a hedged result or a fabricated one to fill the slot.
The workaround: I'm already a real Claude instance in this conversation. skeptic's eval doesn't fundamentally need an API call - it needs a model producing real Prover, Skeptic, and Judge text against the exact prompts in aiService.ts. So I ran all 16 fixtures through 16 separate, independent subagents, each handed only the file content and the three prompts verbatim, each with zero access to the dataset's ground-truth labels - the same blindness the automated harness has. This is not the canonical npm run eval result. It's a faithful, honest substitute, and the differences matter enough that I'm stating them plainly before the numbers: no enforced Zod structured-output schema (the real harness forces each Judge response into a strict shape; these were free text), and it's 16 independent subagent runs rather than one continuous process. Read what follows as real, today, reproducible in spirit - not as the number that goes on a slide claiming the production pipeline's accuracy.
The 8 vulnerable fixtures: perfect recall
Every genuinely vulnerable fixture - SQL injection, a hardcoded Stripe key, a hallucinated crypto.hashSync call, sanitization theater, broken auth, MD5 password hashing, path traversal, and a shared mutable session token - was caught and correctly reasoned through, confidence ranging from 0.80 to 0.98. The Skeptic genuinely tried to debunk each one (that's its job), and in every case either failed to find real mitigating context in the file or correctly conceded a secondary point while the core finding stood. Recall: 8/8.
The Prover-only baseline is unmeasurable by the harness's own heuristic
This is the real headline. The eval script's own comment admits the Prover-only check is "a keyword read on its own text, not a hard classifier" - and running it against real model output shows exactly how badly that heuristic breaks down. The Prover prompt explicitly instructs checking four named AI-pitfall categories: "Ghost Methods," "Sanitization Theater," "Orphaned State," "Lazy Logic." A careful Prover, even one correctly clearing a file, says so by name - "Sanitization Theater: none found," "No injection vectors, ghost methods, or orphaned state were found." Every one of those clean verdicts contains the exact keyword the scoring regex is watching for, with no awareness of the word "none" sitting next to it.
Checked against all 16 real responses: every single clean fixture's Prover text trips the flag, for this reason, regardless of the Prover's actual verdict. Prover-only precision by the literal scoring code: 8 true positives, 8 false positives, 0 true negatives - 0.50 precision, dragged down not by bad judgment but by a scoring heuristic that can't tell "Ghost Methods: none found" from "Ghost Methods: found." The eval's own documented caveat about this ("directional signal, not a leaderboard number") turns out to be the single most important line in the file.
The full pipeline: 0.667 precision, 1.0 recall, 0.8 F1 - and that number undersells it
Four of the eight clean fixtures also crossed the Judge's 0.5 confidence threshold, which mechanically scores as four false positives: 0.667 precision, 1.0 recall, 0.8 F1 by the literal numbers. Here's what's actually inside those four: