feat(benchmarks): add labelled corpus metrics
Your AI's guard dog to stop it from going rogue.
Brought to you by:
doberman
Originally created by: tomatotomata
Implements the first complete slice of [#241]:
tests/corpus/benchmark.jsonlpython -m pytest tests/unit/test_benchmark_agentdojo.py tests/unit/test_benchmark_corpus.py tests/unit/test_benchmark_harness.py tests/unit/test_benchmark_operator_model.py tests/integration/test_benchmark_corpus_gate.py tests/integration/test_benchmark_synthetic_gate.pyruff check passed on changed Python files with the repository's existing Ruff 0.15 compatibility exclusionsgit diff --check passedThe full repository suite was also attempted, but the local run exceeded three minutes before producing a result.
Originally posted by: fu351
Saw the update land — thank you for taking [#241] on. Wiring the corpus rows through the real decision engine instead of a mock was the right call: it's what makes the TPR/FPR numbers worth trusting. The determinism and redaction gates are exactly the discipline this repo cares about, so you're building on the right foundations.
No rush from my side while it's in draft. Two things that might save you time:
main— a few PRs merged this week. If the rebase turns into a slog, ask here and I'll point you at what moved.pytest -n auto), so the targeted runs you listed are plenty locally.Flip it to ready whenever you want eyes on it and I'll review promptly. Questions along the way are welcome here or on Discord. Great to have you building this.
Related
Tickets:
#241Originally posted by: fu351
Closing this one, and you're owed a straight explanation, because closed should not read as rejected.
[#241] got implemented on main last week as [#370]: a 137-row corpus with per-category TPR/FPR/precision and a CI gate, building on [#322]'s harness-fidelity work. A security-audit deadline made the measurement gap urgent and I built it in-house rather than waiting on a draft that was sitting conflicted. The timing cost you the landing, and that's on the maintainer side, not on your design.
Worth saying plainly: your draft called several things right before [#370] existed. Schema validation before evaluation, determinism and redaction as explicit test gates, and running rows through the real decision engine instead of a mock are all in the shipped version too. The main design difference is calibration: [#370] derives each attack row's expected floor from the live engine (raise-only, so the corpus is a regression fence), where your draft pinned fixed thresholds.
If you're up for another measurement piece, [#243] (friction telemetry, level-6) is cut from the same cloth: interventions-per-session as the instrument for the alert-fatigue thesis, which the new corpus made measurable (almost all mitigation today is AUTH, not BLOCK). [#234] (level-4) is a smaller calibration slice if you'd rather warm up. Comment on either and it's yours.
Related
Tickets:
#234Tickets:
#241Tickets:
#243Tickets:
#322Tickets:
#370Ticket changed by: fu351
Originally posted by: fu351
@tomatotomata Sorry this one wound up closed; the labelled-corpus groundwork was real, and I hope it wasn't your last swing here.
Quick community roll-call: are you in the Doberman Discord? If yes, drop your handle here (or DM me there) so I can match the GitHub side of your work to your Discord name. If not, you're warmly invited: https://discord.gg/Sfy5XGNqty