altair823
58a11cc2b8
feat(p5-1): kb-eval crate — golden-fixture runner + eval persistence
- new kb-eval crate: load_golden_set (YAML) + run_eval (per-query search/ask + persistence)
- new kb-store-sqlite::eval module: record_eval_run_with_results (transactional), document_exists / chunk_exists probes
- fixtures/golden_queries.yaml: 5-entry KO+EN template
- tests: 13 pass (loader: parse, dup-id, missing chunk_id; runner: elapsed, snapshot, error capture, JSONL, determinism, persistence, config_snapshot)
- per_query.jsonl mirror written to runs_dir/<run_id>/
- temperature=0 + fixed seed → byte-identical per_query.jsonl (lexical)
deviations from spec (documented in code):
- run_id uses uuid::Uuid::now_v7().simple() (timestamp-ordered hex) instead of ULID — uuid already in workspace deps
- load_golden_set_validated kept #[cfg(test)] pub(crate) — production inlines validate_against_db
- snapshot fixture uses normalized projection (id/query/mode/first_hit) — full byte-determinism covered by separate test
- index_version in config_snapshot left null (composed per call by kb-app, not config-level)
deferred to follow-up:
- App reuse across queries (currently rebuilds App per query)
- expand_path hoist to kb-config (3 crate clones now)
- --max-queries flag (deferred to P5-2 per updated spec)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:01:09 +00:00
..
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 18:01:09 +00:00
2026-04-27 23:38:13 +00:00
2026-04-27 13:10:31 +00:00
2026-04-27 13:10:31 +00:00
2026-04-27 23:38:13 +00:00
2026-04-27 11:41:55 +00:00
2026-05-01 16:16:01 +00:00
2026-05-01 16:16:01 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-05-01 16:32:28 +00:00
2026-04-27 11:17:24 +00:00
2026-04-27 11:17:24 +00:00
2026-04-27 11:17:24 +00:00
2026-04-27 11:17:24 +00:00
2026-04-27 11:17:24 +00:00