Evaluation tracks
The development v2 numbers on Search evaluation are not
substitutes for a completed release run. The controlled and ecosystem cohorts
also have separate manifests, snapshots, and judgment provenance.
Controlled corpus contract
The release fixture set contains:- 150 HTTP records derived only for shape from a CDP snapshot;
- 60 MCP tool records;
- 45 schema-valid adversarial records; and
- 45 sparse/cold-start records.
.example URLs, deterministic Stellar-shaped
addresses, seven-decimal atomic amounts, exact-only payment options for this
benchmark version, and a sidecar for category, liveness, provenance, and fixed
USD authoring snapshots. The sidecar is not exposed as Bazaar metadata.
The 300 fixtures are compiled with the published seller SDK and checked with
both upstream Bazaar validators. The wire object contains only official x402
fields. Foreign CDP data is kept outside the repository’s Apache-2.0 claim;
committed transformed fixtures do not copy source prose, tags, examples, or
schemas.
Query and qrel model
The release query set is frozen: 50 release queries and 50 development queries. Queries cover normal developer tasks, semantic paraphrases, network/scheme and price constraints, MCP tools, no-result cases, and adversarial wording. Query wording generated by a model can assist development only; release questions are curated and are never replaced by model output. Each query-resource pair receives a grade:$8
resource into a valid result for a max_price_usd: 5 query.
Human calibration and model judging
OpenRouter is optional and isolated to the relevance-labeling workflow. The default judge isdeepseek/deepseek-v4-flash-0731, temperature zero, strict
JSON output, bounded retries, rate-limited concurrency, and resumable cache
checkpoints. The API key is read from OPENROUTER_API_KEY only.
Before release judging:
- deterministically select a stratified 400-pair calibration set;
- obtain genuine human grades in a separate import file;
- compare model and human grades;
- review disagreements and severe disagreements;
- publish model ID, revision, prompt hash, timestamp, response hash, and calibration results.
0.70, and severe disagreement at or below 5%. Model output is never
called human review. Pending and placeholder grade-0 rows remain explicitly
marked until independent review completes.
No-result queries are catalog-absence assertions. They are evaluated by
no-result accuracy, not allowed to inflate recall/nDCG by pretending that an
empty result has a semantic relevance label.
Handwritten v2 design notes
The handwritten benchmark is agent-authored and owner-reviewed, not falsely described as fully human-authored ground truth. Fresh-context authoring agents receive isolated task packs and write only to their assigned staging shard; a separate grading context must not see the retrieval system, rank, score, or authoring context. The project owner accepts or rejects merged artifacts. The labeled core is 100 slots across 20 capability families, with five slots per family. Its target mix is 85 HTTP and 15 MCP resources; 70 exact-only, 22 exact-plus-upto, and 8 upto-only payment sets; about 15 adversarial records; and about 10 sparse records. Four hundred individually authored distractors make the MVP corpus 500 records. The exact family tables and axis assignments live inhandwritten-evals/spec/families.md and axes.md.
The authoring axes are deliberately anti-correlated: capability family, resource
type, input shape, output shape, coverage, freshness, price tier, network,
scheme set, and attestation must not become shortcuts for relevance. MCP has
additional tuple, schema, transport, and tool-count axes. is_sparse,
is_distractor, and adversarial_kind are orthogonal tags, not one overloaded
source_class enum.
Qrels distinguish an inspected grade-0 pair from an unjudged pair. Exact dense
and exact hybrid methods build the candidate pool; production lexical, semantic,
and hybrid profiles are scored against that pool rather than defining their own
ground truth. The current MVP scope explicitly defers the hardened hash-chain
release ledger and the critic workflow; the reports must say so rather than
implying those controls ran.
The six maintenance invariants planned for CI are equally important as aggregate
scores: stable known-item retrieval, bounded paraphrase churn, filter monotonicity,
threshold compliance, duplicate resistance, and deletion isolation. A benchmark
that improves MRR while violating one of these invariants is not an acceptable
search release.
Search profiles
Every profile runs through the same productionSearchService:
- lexical PostgreSQL FTS;
- semantic embedding-only;
- weighted hybrid RRF; and
- hybrid plus a real configured reranker.
Metrics
The report includes:- Precision@5 with denominator five;
- Recall@20;
- MRR;
- nDCG@5 and nDCG@10;
- bpref and judged@k;
- hard-filter and evaluation-only constraint violations;
- no-result accuracy;
- grade-0 rate;
- adversarial top-1 and resistance rates;
- provider concentration;
- embedding completeness and failures;
- warm/cold result share;
- reranker lift; and
- p50/p95/p99 latency.
Isolation and reproduction
Release mode creates a random PostgreSQL schema, setssearch_path, runs
migrations, proves table ownership, seeds the fixture catalog, runs the same
HTTP search service used in production, and drops the schema after the run. It
never truncates a configured catalog. If isolation cannot be proven, it aborts
before seeding.
Release gate
The gate opens only when all of these are true:- zero production hard-filter violations;
- zero invalid indexed records;
- complete current pool, run, and holdout artifacts;
- genuine human calibration passes;
- hybrid improves lexical on the frozen release split;
- reranking matches or improves hybrid when enabled;
- perfect no-result accuracy;
- adversarial fixtures do not dominate top results;
- no embedding/provider fallback in the release run; and
- configured p95 targets are met.