Repository navigation
Add evals check-runner, its Console API twin, and Custom runner documentation - #2239
Merged
Merged
Conversation
Static checks freeze the Custom runner manifest, reporting each malformed field, missing source, invalid target, unpinned Harness, missing login or [providers] key and unpriced role Model. --suite/--task runs one Trial through the Experiment execution in a private directory, outside Experiment storage. /api/v1/evals/check-runner returns the CLI's --json report. Refs #2192
…check-runner Refs #2192
Address review: the dry run and Experiments share the review-suite refusal and nonempty Trial input checks, both Console twins run the CLI through one helper, Check names come from one list, execute() no longer reports a failed check as success, and code navigation points at the Custom runner check. Refs #2192
A run-scope caller could name any local .toml file; its TOML parse error echoed the offending line, secrets included, in the report. The API now checks Custom runners by name, as ADR 0026 keeps caller-selected local paths CLI-only.
This was referenced Nov 15, 2026
Closed
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
thirdshift evals check-runner <name-or-file.toml> [--suite <suite> --task <task>] [--json]checks a Custom runner before an Experiment spends Trials on it. Its Console twin isPOST /api/v1/evals/check-runner.The dry run reports the Trial's outcome,
void_cause, cause, Score with each code check, and each Session's role, Models, cost and accounting gap. It exercises everything an Experiment Trial does:request.jsonandresult.jsongit_excluderecord_commandandsessions.jsonconversion into OTLP tracesaccounting_gapandweb_searchVoid checksIt writes nothing under
~/.thirdshift/evals/experiments.The Custom runner contract is documented in
docs/eval-tasks.md(new "Checking a Custom runner" section),docs/trial.md,docs/experiment-results.mdand the user manual. That covers:request.json,result.json,sessions.jsonandrecord_commandcontract--baseline-runnerand--candidate-runnerflags[providers]Trial keys in the Credentialsevals check-runnerand its APIThe manual HTML is regenerated. The hand-written homepage, how-it-works and architecture pages mention the command.
Closes #2192
Evidence
Execution evidence
origin/issue-1468):thirdshift evals check-runner fixture --json…full usage text…
exit=2
test check_runner::a_dry_run_confines_the_runner_in_the_trial_sandbox ... ok
test check_runner::roles_naming_unpriced_models_are_reported ... ok
test check_runner::missing_sources_and_escaping_home_targets_are_each_reported ... ok
test check_runner::a_dry_run_refuses_unusable_tasks_before_checking_the_runner ... ok
test check_runner::missing_harness_logins_and_provider_keys_are_reported_then_accepted ... ok
test check_runner::a_valid_runner_passes_with_the_digest_an_experiment_records ... ok
test check_runner::static_problems_skip_the_dry_run ... ok
test check_runner::malformed_manifests_are_refused_before_any_other_check ... ok
test check_runner::a_dry_run_reports_outcome_checks_and_session_cost_without_an_experiment ... ok
test check_runner::a_dry_run_reports_its_void_cause_and_fails_the_check ... ok
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 241 filtered out; finished in 6.09s
test start::api_checks_a_custom_runner_with_the_cli_report ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 331 filtered out; finished in 0.63s
PASS npm test --prefix site (112.16s)
PASS cargo build --locked (0.65s)
PASS npm test --prefix console (223.48s)
FAIL cargo test (236.53s)