This guide describes the released Agent Eval 0.18.0 API, available from Maven Central.
Java 21, repository
agent-judge, group io.github.markpollack, artifact prefix agent-judge-,
and package prefix io.github.markpollack.judge remain unchanged.
Recompile adopting callers against matching module versions; no binary/source compatibility is promised.Configure before execution
A pure Requirement owns identity, revision, specification and source.
Typed construction binds that actual requirement and evidence to a ready non-generic Judge or Jury.
Construction acquires no evidence and invokes no backend.
Each direct execution is fresh; suppliers acquire one snapshot per execution.
EvalRuntime<Q,A> retains native answers and invocation facts; generated EvalModel specializes that port.
SpringAiEvalModel and AgentClientEvalModel bridge generated runtimes.
Tools, permissions, workspace, credentials and timeouts belong to the configured backend.
The requirements example supplies a complete caller POM and Java program.
It exercises actual requirements, prepared evidence, cached AssertJ and retained V6 equality without inference.
Preserve coverage and reliance separately
An ordinary panel reduces independently configured opinions. Explicit AllOf assignments validate required constituent coverage; a native roster declares its selected population. An uncertain required item cannot be filtered out to obtain PASS. Generated RFC/EARS rosters enter once per selected roster; a backend may make several internal model/tool calls. Structured runtimes, including Jev, execute per item. Keep the complete Verdict: originals, rejected returns and their separate treatments, children, attempted tiers, seat weights, captured voting-rule configuration, requirement associations and invocation owners. One declared usable member preserves its complete semantic identity.conclusion() derives PASS, FAIL, INCONCLUSIVE or NOT_APPLICABLE.
Policy receives the whole original usable Verdict and decides RELY, ABSTAIN or ESCALATE.
RELY may trust a negative conclusion; withholding does not rewrite it.
EvaluationResult retains the original with NotRequested, Decided or Failed policy application and optional attribution.
Live AssertJ stages cache their result or thrown failure across terminals.
Retained assertions and reports execute no producer or policy; explicit Evaluations.apply(verdict, policy) requests a new decision.
Cancellation, interruption, fatal errors and preservation-limit failures propagate.
Unknown usage remains absent, not zero.
Migrate storage deliberately
Results/evaluations use V6; descriptions remain V3. Add matchingagent-judge-json-jackson2 explicitly.
Use VerdictCodec for text/AllOf and NativeRequirementCodecs.codec() for RFC/EARS specifications.
Low-level Jackson callers explicitly register ResultJson.module() and trusted native/custom specification codecs.
Ordinary POJO binding is not the storage contract.
Current typed codecs refuse older result versions.
Preserve original bytes and version tags instead of relabelling or automatically backfilling them.
V5 archival reader: c0ae61dda4a65e9278485cb528925d71f27a1007.
V4 archival reader: 7387aab1bf9d3bd56e4d9a932f2f40e2978d676d, which refuses V2/V3.
No verified typed V2/V3 reader pin is supplied.
The retained-results guide explains strict limits, ownership and alternate byte custody.