Results and PASS
How to read Result; pass@k is a job metric, not a PASS for the whole dataset.
Do not mix these up
run.pycompleted ≠ PASS- Trajectory / tokens / agent self-report ≠ score (including
evaluation/observation.jsonlandevaluation/checks.json) - PASS / FAIL comes only from the
evaluator.pyreturn value - Whole-dataset / job aggregates (including pass@k) ≠ a PASS for the whole dataset
- A post-run analyzer report ≠ a score, and it does not rewrite
evaluation/checks.json
On the terminal
- Result: status and evaluation for this run
logs: evidence path under the dataset root (e.g..ageval/runs/<run_id>; typical whenk=1)- Whole-dataset
pass_rate/mean_score: job summary
Always-k and pass@k / pass^k
After Always-k (-k / --n-attempts), the whole-dataset summary.json → metrics includes:
| Key | Meaning |
|---|---|
pass_at_k | pass@k (unbiased “≥1 success”; Harbor-style) |
pass_power_k | pass^k (all-k success estimate) |
n_attempts | Always-k budget for this job (CLI / job only — not task.yaml) |
k_values | k list computed for this summary |
per_task | Per-task n / c and per-k maps (audit) |
| Whole-dataset score | Mean over tasks for that metric (omit tasks with too few samples) |
Attempts that carry fork stay out of the default pass@k and pass^k counts. They remain visible as their own rows.
Contract: metrics.pass_at_k / pass_power_k
Each key is a stringified k ("1", "2", "5", …). Value shape:
{
"1": { "value": 0.75, "n_tasks": 4, "incomplete_tasks": 0 },
"2": { "value": 0.5, "n_tasks": 3, "incomplete_tasks": 1 }
}| Field | Meaning |
|---|---|
value | Mean over tasks that can compute that k; null if none |
n_tasks | Tasks included in that k’s denominator |
incomplete_tasks | Tasks omitted (e.g. pass@k when n < k) |
Upload / Registry:
ageval results upload-suiteensures / recomputes k metrics locally (fromattempts[]or per-taskn/c) before POST of the fullmetricsblob.- Registry stores
metrics_jsonas-is; list/get suite does not strippass_at_k/pass_power_k. - First-class columns remain
pass_rate/mean_score; k metrics live undermetrics. - Not part of
config_fingerprint/ job identity; different k jobs may sit side by side. - Legacy suites without k data: missing
metrics.pass_at_k→ Hub shows—.
task_refs (multi-attempt): may include n, c, attempt_run_ids (plus primary run_id) for audit and --with-attempts.
What Hub actually lists
| Upload command | Artifact | Hub primary UI |
|---|---|---|
ageval results upload --run … | Single Attempt | Usually not on Dataset Leaderboard / Task Jobs |
ageval results upload-suite --suite-run … | Suite row + metrics / task_refs | Leaderboard only when complete and release-bound; incomplete or draft-bound rows stay on Task Jobs |
… --with-attempts | Also packs attempt dirs | Jobs can open Attempt detail / trajectory |
So: to show whole-dataset results on the public board, run the whole dataset → upload-suite against a published release. Uploading one task is not enough.
Local view
ageval view opens a dataset root, a directory of dataset roots, or a cached registry ref. The header is Datasets, Jobs, Agents, and Plugins. Jobs → Tasks → Attempt is the results path for the package you pick.
Attempt pages may show Timing (and Tokens when present). When analysis/<analyzer>/report.json exists, the evidence tabs include Analysis. It lists those observations and is not a score. Trajectory steps follow file order (thought next to the tools it precedes). A step may show a duration when the row has elapsed_ms. Verifier may show evaluation/checks.json as a structured preview in the file tree (and a Trajectory / Files toggle when observation.jsonl is also present).
Failure kinds
| Kind | Intuition |
|---|---|
| Config / lock | Never entered formal execution |
| Execution ERROR | Failed inside the boundary. error stores phase, title, and message. A ScriptError keeps the title you passed; other exceptions use the class name. Viewer and Hub show that title beside ERROR. PASS and FAIL leave error empty |
| FAIL | Evaluator says no |
| PASS | Evaluator says yes |
| Run-phase limit | Evaluator still scores; limit is wall_time_seconds or agent_invocations |
| Phase clock | Environment or evaluate expiry is ERROR |
Exit codes: current CLI + skill ageval-cli.