# Changelog — klieo-eval

All notable changes to this crate are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
This crate adheres to [Semantic Versioning](https://semver.org/).

## [1.0.0] — 2026-06-07

### Added

- Initial release. Recall-quality metrics — `hit_rate`,
  `mean_reciprocal_rank`, `mean_precision_at_k`, `mean_recall_at_k`,
  `mean_ndcg_at_k` — over a `RecallSample` slice.
- `RecallSample { query, expected, returned_ids }` input shape.
- `RecallReport { k, per_query }` output shape with per-query
  `first_hit_rank`, `expected_count`, and per-metric breakdown.
  `expected_count` is preserved so `mean_recall_at_k` and
  `mean_ndcg_at_k` can correctly skip queries with empty
  `expected` (the metrics are undefined there).
- Pure-Rust, no async, no memory-trait dependency. Caller drives
  the recall pipeline and hands the harness pre-collected
  rankings.
- `serde::Serialize` on `RecallReport` and `PerQueryScore` for
  CI-artifact JSON output.
- `#[non_exhaustive]` on every public struct.
