Skip to content

harness-opt-bench: rename, explicit trial limits, archive, and documentation clean-up - #88

Merged
varunursekar merged 19 commits into
mainfrom
rebuttal-prep
Sep 13, 2026
Merged

varunursekar merged 19 commits into
mainfrom
rebuttal-prep

Conversation

@varunursekar

@varunursekar varunursekar commented Sep 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Prepares harness-opt-bench for the next round of experiments and makes it easier to read.

  • Rename harness-engineering-benchharness-opt-bench, matching the paper. All path references follow. The W&B project name and S3 locations are unchanged on purpose.
  • Explicit outer-trial limits. The build config gains fields for the optimizer trial's sandbox timeout, idle timeout, agent clock, internet access and resources, rendered into the compiled task and forwarded to Harbor. Every benchmark now states 86400 / 3600 / 72000 / true; the values match what previously applied implicitly, so measured behaviour is unchanged. A cut-off optimizer is now scored rather than lost.
  • Archive the three benchmarks not reported in the paper (swe-atlas-qna, tau3, swe-bench-pro) under harness-opt-bench/archive/, with a README stating why each is out. Docs, CI matrix and config tests describe the four reported benchmarks.
  • Scripts. scripts/ keeps only what defines or reproduces the benchmarks: split generation, task-data status, baseline re-scoring, per-trial token attribution. Team-specific operator scripts leave the repository; recover_producer_tokens.py (forensics for a fixed metering bug) is deleted.
  • Documentation. New README with the paper title, arXiv badge and architecture figure; CONFIGURATION.md rewritten around the evaluation protocol, shared defaults, per-benchmark values and change rules; the run-benchmark runbook rewritten for a general reader.
  • MODAL_ENVIRONMENT is declared among each build's secrets so the launcher and sidecar place sandboxes in the same environment.

Verification

  • tests/test_v05_benchmark_configs.py, tests/test_v05_harbor_build.py, tests/test_v05_cli.py pass.
  • Every build compiles; the outer task.toml carries the new limits.
  • A GAIA cell launched from this stack ran end to end (optimizer, evaluations, agent clock hand-over to the verifier, finalization, session archive).

Also included, via #89

Merged into this branch so the two land together; #89 has its own review record.

  • Reproducible compiled tasks. Nothing run-specific is written into a compiled task: the gateway scope tokens and the producer allow-list arrive by environment variables that vero harbor run sets per launch, read once at service start. The baseline commit carries a fixed date, so two compiles of one config are byte-identical. vero harbor build --manifest records a checksum manifest and --check fails on drift; one manifest is committed per reported benchmark.
  • vero_requirement lets a build pin a published scaleapi-vero==<version> so the images install it instead of copying the source tree. Unset for now.
  • Target-model routing. Target models are named without a provider prefix and mapped to a deployment through model_aliases on the evaluation scope (--param target_model_route=). The Terminal-Bench variant becomes build.routed.yaml.
  • inner_env is required; rescore_candidate.py understands required parameters and applies the same target routing.
  • Build files and docs rewritten in plain language, with the shared field explanations consolidated into a Deployment settings section of CONFIGURATION.md instead of repeated in every build file.
  • A small GAIA variant (build.shell.e2e.yaml) exercises the whole trial in under an hour; its score is not a result. It ran live end to end: optimizer stopped by its clock, verifier scored the submitted candidate, error block empty, both session archives present.

Review findings from Greptile on both PRs are addressed in the final commits.

🤖 Generated with Claude Code

RetriggerConfidence Score: 5/5

The PR appears safe to merge; no new changes or outstanding review findings remain.

Summary

  • Adds explicit optimizer-trial clocks, sandbox limits, internet policy, and resource settings.
  • Makes compiled tasks reproducible while moving launch-specific credentials and routing configuration to runtime environment variables.
  • Adds manifest generation and drift-checking support, published-package pinning, required inner-environment configuration, and target-model routing.
  • Updates the four reported benchmark definitions, configuration tests, and operational documentation.
  • No changes were made after the previous review.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  B[Benchmark build.yaml] --> C[vero harbor build]
  P[Partitions and seed target] --> C
  C --> T[Deterministic compiled Harbor task]
  R[Runtime environment variables] --> L[vero harbor run]
  T --> L
  L --> O[Outer optimizer trial]
  O --> E[Nested benchmark evaluations]
  E --> F[Trusted final scoring]
  F --> A[Result and session archives]
Loading

Reviews (6) · Last reviewed commit: "Drop the committed compile manifests"

varunursekar and others added 6 commits September 12, 2026 14:55
…aper

Directory move plus every path reference. Deliberately unchanged: the W&B
project name (keeps rebuttal runs in the same project as the paper runs) and
the S3 bucket and prefix names (existing remote objects).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
New build fields: optimizer_agent_timeout_seconds ([agent] timeout_sec, so a
runaway optimizer is stopped and still scored), optimizer_sandbox_timeout_seconds
and optimizer_sandbox_idle_timeout_seconds (forwarded as --ek to the outer
Modal sandbox), optimizer_allow_internet, and optional cpus/memory_mb/storage_mb.
Every benchmark now states 86400 / 3600 / 72000 / true; resources stay undeclared
on purpose, which is Modal's default and what every August cell ran under.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… in the enterprise Modal environment

README leads with the paper title, the arXiv badge (2608.06301), the
architecture figure rendered from the paper, and a short statement of what the
benchmark measures, then the layout of a benchmark and how to launch a cell.

MODAL_ENVIRONMENT is declared among every build's secrets so the launcher and
the sidecar both place their sandboxes in the environment the env file names;
the env files set enterprise.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
swe-atlas-qna, tau3 and swe-bench-pro move to harness-opt-bench/archive/ with a
README stating why each is out: a floor-effect reward, LLM-graded noise, and a
config never normalized to the shared conventions. The top-level README,
CONFIGURATION.md, the run-benchmark skill, task_data.py, the CI matrix and the
config tests now describe the four paper benchmarks only. The archived configs
still compile but nothing exercises them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…book usable outside our setup

Five operator scripts (launch_cell.sh, cleanup_orphans.sh, wandb_progress.py,
check_keys.py, pass_results.py) encoded one team's credential files, run
layout, proxy headers and W&B project; they leave the repository for the
untracked runs/ops/ directory. recover_producer_tokens.py, forensics for the
2026-07-28 metering bug, is deleted; its finding is recorded elsewhere.

scripts/ keeps partition_dataset.py, task_data.py, rescore_candidate.py and
per_trial_tokens.py, which define or reproduce the benchmarks.

The run-benchmark skill and the README no longer reference the removed
tooling or team-specific measurements; they describe what any user with a
Modal account, a W&B account and an OpenAI-compatible endpoint needs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…al reader

Plainer language and no deployment-specific terminology. CONFIGURATION.md now
describes the protocol (partitions, selection, budgets, attempts, failure
handling, reported measurements), the shared defaults, per-benchmark values for
the four reported benchmarks including the optimizer's own wall-clock limits,
and the rules for changing a benchmark. The GAIA row describes the reported
shell-seed variant, whose baseline is a measured zero.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Comment thread vero/src/vero/harbor/build/config.py Outdated
varunursekar and others added 13 commits September 12, 2026 19:39
The optimizer trial's clocks, internet policy and resources sat on the
Harbor-evaluation field group, so a build scoring candidates with a command
could not declare them although its optimizer runs in the same kind of
sandbox. They move to their own group, inherited by every build.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Nothing per-run is baked any more. The three scope tokens and the producer
allow-list arrive by environment (VERO_PRODUCER_TOKEN, VERO_EVALUATION_TOKEN,
VERO_FINALIZATION_TOKEN, VERO_PRODUCER_SCOPE): vero harbor run mints or
chooses them per launch, task.toml passes them to compose like secrets, and
the gateway and sidecar read them once at container start, so a later change
to the launcher's environment cannot move a running gateway's allowances.
The baseline commit is stamped with a fixed date so its hash depends on the
seed alone. Two compiles of one config are now byte-identical.

vero harbor build --manifest writes a SHA-256 manifest (one hash each for the
task-data and vero-source subtrees); --check recompiles and fails on drift.
A compiled.manifest.json is committed for every baseline that compiles.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
New build field vero_requirement (an exact pin such as scaleapi-vero==0.6.0).
When set, the compiler skips the source copy and both images install that
requirement with the extras each needs; the compiled task then holds no vero
and is small enough to commit (GAIA shell: 1.5 MB against 6.4 MB). The pin
must equal the vero doing the compiling, since the images read the configs it
wrote; a mismatch is refused at compile time.

Unset everywhere for now: 0.5.0 on PyPI predates this branch's gateway and
outer-limit changes, so a task compiled against it would not start. The GAIA
yamls carry the line commented out with that explanation. Manifests are
regenerated after the rebase onto the renamed package.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Harbor hands the Modal SDK no environment name, so sandboxes went to the
workspace default (main), where every cell before 2026-09 ran. Declaring
MODAL_ENVIRONMENT among each build's secrets carries it to the launcher and
the sidecar alike; the env files set it to enterprise. Manifests regenerated
for the extra task.toml line.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
build.shell.e2e.yaml is build.shell.yaml with partitions-e2e (2/3/3 cases),
six-run budgets, rescore_top_k 1, and optimizer_agent_timeout_seconds 1500,
so a trial reaches finalization inside an hour. It exercises compile, tokens,
evaluations, the agent clock handing over to the verifier, and the session
archive after a vero change. Its score is never reported.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…2e yaml comment

A plain-language section covering deterministic compiles, the committed
manifests and --check, per-run inputs arriving through the environment, and
the vero_requirement pin.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Build files, READMEs and the runbook are rewritten in plain language. The
evaluation environment is a required parameter (inner_env), target models are
named without a provider prefix and mapped to a deployment through the
evaluation scope's model_aliases (target_model_route), and the Terminal-Bench
variant becomes build.routed.yaml with the route as a parameter.

Kept as they were: the harbor extra the evaluation environment needs (now
overridable), the secrets list and optional telemetry block, and the sandbox
options that group and reclaim evaluation sandboxes. rescore_candidate.py
learns the required-parameter placeholder and applies the same target
routing. Manifests regenerated with inner_env=modal.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The seven build files repeated the same twenty comment lines. Their meaning
now lives in a Deployment settings section, and each build file keeps a
pointer plus the notes specific to its benchmark.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
vero_requirement accepts only an exact pin of the VeRO distribution, and the
compiler refuses a pin it cannot check against the installed version.
rescore_candidate.py resolves build parameters from --param and then the
environment, as the build loader does. The archived builds get back the
sandbox options the rewrite dropped, including the keepalive the SWE-Atlas
images need. One generic comment left in the GAIA builds is removed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Reproducible compiled tasks, target-model routing, and benchmark documentation clean-up
They hashed the copied vero source tree, so every change to vero moved all
four and they were regenerated five times in a day. `--manifest` and
`--check` stay as a way to prove two checkouts compile the same task;
nothing is committed for them to drift against.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Comment thread harness-opt-bench/CONFIGURATION.md
@varunursekar

Copy link
Copy Markdown
Collaborator Author

@greptile review

@varunursekar
varunursekar merged commit c324c62 into main Sep 13, 2026
7 checks passed
@varunursekar
varunursekar deleted the rebuttal-prep branch September 13, 2026 04:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant