From 0988f66331f55382750dba03fe34778f493a2960 Mon Sep 17 00:00:00 2001 From: altair823 Date: Fri, 29 May 2026 17:45:10 +0000 Subject: [PATCH] =?UTF-8?q?feat(cli):=20kebab=20eval=20variants=20=20=E2=80=94=20=EB=B3=80=ED=98=95=20=EC=9D=BC=EA=B4=80?= =?UTF-8?q?=EC=84=B1=20=EC=A7=84=EB=8B=A8=20=EB=A6=AC=ED=8F=AC=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- crates/kebab-cli/src/main.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/kebab-cli/src/main.rs b/crates/kebab-cli/src/main.rs index 1d802d9..3568c32 100644 --- a/crates/kebab-cli/src/main.rs +++ b/crates/kebab-cli/src/main.rs @@ -422,6 +422,14 @@ enum EvalWhat { /// into `eval_runs.aggregate_json` (P5-2). Aggregate { run_id: String }, + /// Compute variant-consistency metrics for a stored run and print + /// a Markdown report (or JSON with `--json`). + Variants { + run_id: String, + #[arg(long)] + json: bool, + }, + /// Diff two stored runs (P5-2). Default output is a Markdown /// summary; use `--json` (top-level flag) for the raw report. Compare { @@ -1392,6 +1400,16 @@ fn run(cli: &Cli) -> anyhow::Result<()> { Ok(()) } + EvalWhat::Variants { run_id, json } => { + let rep = kebab_eval::compute_variant_consistency_with_config(&cfg, run_id)?; + if *json { + println!("{}", serde_json::to_string_pretty(&rep)?); + } else { + print!("{}", kebab_eval::render_variants_md(&rep)); + } + Ok(()) + } + EvalWhat::Compare { run_a, run_b,