Choose a corpus reader
The manifest's suite selects the reader. Use the packaged Python route for a supported suite or build the Go CLI to judge a corpus directory.
From the repository root:
GOWORK=off go build -o aee-verify ./cmd/aee-verify
./aee-verify vectors
./aee-verify vectors-ai-agent-action
./aee-verify vectors-artifact-binding
./aee-verify vectors-dependency-selection
| Result | Exit |
|---|---|
| Every member matches its manifest | 0, with counts by verdict |
| A member or corpus-level check fails | 1, with findings |
| Missing, unreadable or unsupported suite | 2, with the suite or read error |
The Go binary supports its registered readers, rather than every directory named vectors-*. In particular, the SCITT/COSE corpus retains its own checker; the binary refuses that suite and describes the missing reader.
The following Python routes describe the current source. A released wheel exposes its own set with --list-corpora.
| Current source Python route | Supported corpora |
|---|---|
| Packaged reference readers | vectors, vectors-w3c-report, vectors-observed-effect, vectors-receipt-signature, vectors-agent-audit-record, vectors-anchored-chain, vectors-mcp-owasp, vectors-a2a-jcs-v01, vectors-grade-floor, vectors-agent-change-admission |
| Named verifier required | vectors-source-coverage |
| Own external contract supported | vectors, vectors-receipt-signature, vectors-anchored-chain, vectors-a2a-jcs-v01, vectors-grade-floor and vectors-agent-change-admission; source coverage uses its consumer contract |
vectors-w3c-report, vectors-observed-effect, vectors-agent-audit-record and vectors-mcp-owasp refuse a named verifier. Other suites with no packaged reader exit 2 unless a named verifier supplies their external route. Check each corpus README for its contract.
Two standalone tools have separate jobs: vectors-anchor-stream/run_verifier.py measures a supplied anchors_verify.py implementation; vectors-mcp-record-contract/check_run_record.py checks a run record you supply.
The a2a-jcs-v01 contract
vectors-a2a-jcs-v01 is a2aproject/a2a-tck's Agent Card canonicalization corpus, kept byte for byte and locked by commit and corpus digest in its source-lock.json. Its MANIFEST names two targets, with the vector count of each under targets, and the harness scores one per run:
| Target | Function | Vectors |
|---|---|---|
card-signing-input (default) |
the card without its top-level signatures member, canonicalized |
every vector |
rfc8785 (A2A_JCS_TARGET=rfc8785) |
one JSON value to RFC 8785 bytes | groups A3 to A6 |
The harness runs <verifier> <target> <input.json> once per vector. The input file holds the vector's JSON text: input_raw verbatim for a reject, input serialized for an accept, with every number written as the token the vector file holds, so an integer -0 reaches the verifier as -0. The verifier answers on its last nonempty stdout line:
| Exit | Answer | Meaning |
|---|---|---|
0 |
{"canonical_utf8_hex": "<hex>"} |
produced canonical bytes |
1 |
anything | refused: the input has no canonical form |
| other, timeout, malformed | none | errored |
A MUST-ACCEPT vector passes on the expected bytes; other bytes are diverged and a refusal is refused. A MUST-REJECT vector passes on a refusal; bytes are accepted. The four rule-3 rejects present a card that still carries signatures as its own signing bytes, and pass when the recomputed bytes differ from them. The report has rail: external, the target, and verifier.vectorsExecuted, so the Action's summary applies unchanged. python -m agent_evidence_vectors.a2ajcs is the packaged reference implementation of the contract.