feat: Terminal-Bench adapter for the release canary (release evaluation PR 2) - #39
Merged
noodlemind merged 1 commit intoJul 31, 2026
Conversation
Harbor-based execution of terminal-bench@2.0 cobol-modernization: fail-closed task pinning with tree checksums, documented-flag CLI construction behind an injected spawn, official verifier artifact reading with pytest counts and end-state tree hashing, generic/harness A/B condition builders with parity invariants, a Node stdio bridge agent with explicit stop reasons, and the thin Harbor BaseAgent Python wrapper.
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
noodlemind
force-pushed
the
feat/terminal-bench-adapter
branch
from
July 31, 2026 01:16
f0b6c6a to
c57fafa
Compare
noodlemind
merged commit Jul 31, 2026
c57fafa
into
feat/eval-driver-telemetry-budgets
1 check passed
Owner
Author
|
Commits from this stacked PR are included in #38, which is now the single consolidated PR. |
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
PR 2 of the release-evaluation plan: the Terminal-Bench adapter for the pinned
cobol-modernizationcanary, built on Harbor rather than re-implementing Terminal-Bench execution. Everything is deterministic and provider-free in CI; the Harbor CLI, sandbox, and provider are injected boundaries exercised for real at release time.task-lock.json— pinsterminal-bench@2.0/cobol-modernizationwith a verifier contract (reward files, passing reward) and a task-tree checksum slot.stampTaskLockpins the downloaded task;verifyTaskAgainstLockfails closed on an unstamped lock or any tampered/drifted task file.harbor-adapter.mjs— validates the lock, buildsharbor runargv using only documented flags (-d <dataset@version> --task-name <task> --agent <ref> --model <m> --env <docker|daytona> -n 1), runs the CLI behind an injected spawn with timeout, discovers the newest job directory, reads trial results, and classifies failures: infrastructure (spawn error/timeout) vs provider vs verifier vs a validly graded trial (reward 0 is a fail, not a failure).verifier.mjs— reads Harbor's official verifier artifacts (reward.jsonpreferred,reward.txtfallback), grades against the lock's passing reward, extracts pytest assertion counts, and fingerprints the trial artifact tree (sha256) for auditable end-state evidence. A missing reward staysnull, never coerced to 0.generic-condition.mjs/harness-condition.mjs— the A/B arms. The generic baseline keeps the original instruction and a fair neutral prompt (encourages exploring/testing/verifying) with zero harness vocabulary — enforced by test. The harness treatment starts from the byte-identical baseline and layers the engineer contract, loaded-skill guidance, and CLI activation commands; both arms get identical, independent limit copies.agent.mjs— the stdio bridge: the PR 1 driver/budget/telemetry stack decides actions in Node; a line-delimited JSON protocol (exec/result/done) carries commands to the sandbox. Explicit stop reasons on every exit path:model_finish,budget_exhausted,provider_error(with kind/billed classification),max_steps,protocol_error.harbor_agent.py— the thin HarborBaseAgentwrapper that spawns the Node bridge and executes each command in the Harbor environment. Defensive against exec-surface differences across Harbor releases; syntax-checked in CI, exercised live at release time.Test coverage
30 new deterministic tests (
eval-tb-adapter,eval-tb-verifier,eval-tb-conditions,eval-tb-agent): lock validation and fail-closed pinning, tamper detection, argv construction, spawn/timeout classification, reward parsing precedence and rejection, tree-hash determinism/sensitivity, condition parity and isolation invariants, and the full bridge protocol including provider-error and protocol-error paths.Stack
Based on #38 (PR 1: driver telemetry and budgets). PR 3 adds host adapters; PR 4 adds release orchestration.