Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/benchflow/eval_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,10 @@ def build_eval_plan(request: EvalCreateRequest) -> EvalPlan:
raise EvalPlanError("--matrix currently requires --tasks-dir")
if request.trials < 1:
raise EvalPlanError("--trials must be >= 1")
if request.trials > 1 and request.matrix is None:
# Only the matrix expansion consumes trials; a plain run would silently
# do one trial per task while the caller believes it ran N.
raise EvalPlanError("--trials > 1 requires --matrix")
if request.expected_tasks is not None and request.expected_tasks < 1:
raise EvalPlanError("--expected-tasks must be >= 1")
if request.canonicalize not in {"none", "one-healthy-per-task"}:
Expand Down
7 changes: 7 additions & 0 deletions tests/test_cli_arg_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ def test_build_concurrency_zero_rejected(tmp_path: Path):
assert "--build-concurrency must be >= 1" in result.stderr


def test_trials_without_matrix_rejected(tmp_path: Path):
# Only --matrix consumes trials; a plain run silently does one trial/task.
result = _invoke(tmp_path, "--sandbox", "docker", "--trials", "3")
assert result.exit_code == 1
assert "--trials > 1 requires --matrix" in result.stderr


def test_skill_mode_bogus_clean_error(tmp_path: Path):
result = _invoke(tmp_path, "--sandbox", "docker", "--skill-mode", "bogus")
assert result.exit_code == 1
Expand Down