Benchmarks
What we measured — including where we lose
Every row names the committed file that produced it, so you can re-run it. The eval suites use synthetic configs; the label gold set is 50 rows we wrote ourselves.
01 Detection — 40 seeded configs
Ground truth known by construction: planted routes, laundering-only routes, clean configs, and tie cases. Each case is ingested into its own graph and scanned with the committed query, live against FalkorDB 6.0.2 on 2026-10-17.
02 The fix — the part nobody else ships
One CALL algo.maxFlow, two canonical cuts, the cheaper one chosen by grant count, then task cost, then the write side. Each case proves itself by re-running the leak query with the revoked grants excluded.
03 Label quality — the honest accounting
Labels come from a 35-row rules table aided by tool-set expansions for 11 known servers. The gold set is 50 hand-written rows, run in the package's own test.
04 Runtime guard — demo session, simulated tool results
05 What we did not measure
These have no number yet, so none is printed.
- Head-to-head against other scanners — not run. Positioning is qualitative and cited in docs/RELATED-WORK.md, including where MSCC and CaMeL are ahead of us.
- Retrieval accuracy on tool-selection datasets — not attempted. Retrieval is not the product; the path and the cut are.
- External label ground truth — none exists yet. The 50-row gold set is self-authored, and says so.
- Guard latency overhead — not measured. We print no milliseconds we did not time.
Reproduce any of it
# both eval suites, live — rewrites the JSON these tables read pnpm --filter @lethalpath/eval build && pnpm --filter @lethalpath/eval evaluate # the labeler gold run (section 03) pnpm --filter @lethalpath/labeler test # the guard transcript (section 04) pnpm --filter @lethalpath/guard demo # the committed files themselves cat packages/eval/results/detection.json packages/eval/results/fix-quality.json