v0.10.0-beta — Unified Benchmarks Architecture
Pre-releaseImplements ADR-017 — promotes compliance benchmarks out of
samples/, relocatesPerformanceBenchmark, adds OWASP/MITRE/LongMemEval façades, all under the canonicalAgentEval.Benchmarksnamespace. IntroducesBenchmarkFamilyRegistryas the single source of truth for benchmark family discovery, wired into a new CLI surface (bench --list,bench perf, dynamic per-family--help).
Eleven phases (0 through 10.5) shipped over 14 commits with an Opus gate-review at every phase boundary and a final completeness audit. All 9 yellow items raised during phase reviews closed; ADR-017 four canonical conventions met and pinned by contract tests.
Highlights
BenchmarkFamilyRegistry(ADR-017 Convention 3) — canonical, thread-safe, two registration shapes (CompositeEval-native + external-dataset). 8 families auto-register via[ModuleInitializer].- CLI:
bench --list(registry-sourced, not hardcoded),bench perf {latency,throughput,cost}(previously CLI-less),bench {family} --helpenumerates presets dynamically. - New façades under
AgentEval.Benchmarks:OwaspBenchmark(4 presets, 10-leaf composite with honest skipped leaves),MitreBenchmark(3 ATLAS presets, 12-leaf),LongMemEvalBenchmark(Shape-B external-dataset). - Convention 2 (
EvaluateAsync(EvalInput) → EvalResultadapter) — canonical homogenisation primitive; round-trip throughEvalResultPersistencetested for OWASP, MITRE, and Performance. - Compliance namespace cleanup —
AgentEval.GdprBenchmark.*→AgentEval.Compliance.Gdpr.*(and EuAiAct equivalent) — eliminates the parent-namespace-vs-type-name CS0234 collision class at root. OwaspBenchmark.Top10ForRagrefocused — was label-only divergence fromTop10; now genuinely distinct (Comprehensive intensity, 20-min timeout, RAG threat-model documented).LongMemEvalBenchmark.Full()now throws whenLONGMEMEVAL_DATASET_PATHunset (was: silently degraded to embedded subset — a real footgun).- 3718 main + 477 Memory tests pass; build clean with
GenerateDocumentationFile=true; .nupkg size 5.1 MB (under 10 MB tripwire).
Breaking changes
- Internal compliance namespaces renamed —
AgentEval.GdprBenchmark.*→AgentEval.Compliance.Gdpr.*(same for EuAiAct). Public preset-factory entry points unchanged. Migration: updateusingdirectives reaching internal types. PerformanceBenchmarkrelocated toAgentEval.Evals.Performance.dll. Umbrella NuGet consumers see no change; direct internal-DLL consumers need to add a reference.LongMemEvalBenchmark.Full()now throws whenLONGMEMEVAL_DATASET_PATHis unset (previously silently degraded to embedded subset). UseSubset()for the embedded sample.OwaspBenchmark.Top10ForRag()cost-tier shifted Medium → High (Comprehensive intensity vs Quick). No API signature change; programmatic callers see slower runs but materially deeper probe coverage.
ADR-017 conventions — all four canonical and pinned
- Convention 1 (top-level factory namespace =
AgentEval.Benchmarks) — enforced byBenchmarkNamespaceContractTestsreflection enumerator. - Convention 2 (
EvaluateAsync(EvalInput) → EvalResultadapter) — round-trip integrity tests on OWASP, MITRE, Performance. - Convention 3 (
BenchmarkFamilyRegistrycanonical) — extensibility test proves the registry is genuinely plug-in surface (synthetic family registered at runtime appears inbench --list). - Convention 4 (Opus gate-review after every phase) — 10 review docs cover phases 4 through 10.5 + final audit.
Phase index
| Phase | What |
|---|---|
| 1 | Promote GDPR samples → src/AgentEval.Compliance.Gdpr |
| 2 | Promote EU AI Act samples → src/AgentEval.Compliance.EuAiAct |
| 3 | Relocate PerformanceBenchmark + EvaluateAsync adapter |
| 4 | Lift benchmark factories to AgentEval.Benchmarks namespace |
| 4b | Compliance internal namespace rename (close CS0234 at root) |
| 5 | OwaspBenchmark façade + reflection contract enumerator |
| 5b | Top10ForRag honesty closeout |
| 6 | MitreBenchmark façade + ATLAS technique mapping |
| 7 | LongMemEvalBenchmark façade (Shape B) |
| 8 | BenchmarkFamilyRegistry canonical + CLI bench --list/perf/family-help |
| 9 | CHANGELOG + ADR-017 revision 3 + docs/architecture.md |
| 10.5 | Fix report-writer timestamp race (test infra) |
| 10 audit | Version bump 0.10.0-beta + 4 audit-discovered gap closures |
Install
```xml
<PackageReference Include="AgentEval" Version="0.10.0-beta" />
```
Known issues — deferred to v0.10.1+
Honestly tracked in CHANGELOG [Unreleased]:
- Pre-existing LLM-non-determinism flake on
SafetyPolicyTests.CancellationRequest_ShouldConfirmBeforeCancelling(9/10 over 10 runs; passes in isolation; not introduced by this release). - Missing
docs/redteam/owasp.md(referenced fromOwaspBenchmarkRegistration.docLinkUrl). README.mdbenchmark table +docs/benchmarks.mdsweep.- Agentic-safety + GDPR/EuAiAct domain-pack registry surface flags.
See CHANGELOG.md for full v0.10.0-beta entries and ADR-017 for the architecture.