Add a modified-only dispatch input to the PR review evaluation - #856
Add a modified-only dispatch input to the PR review evaluation#856Wenjie Fan (gggdttt) wants to merge 3 commits into
Conversation
Wires the existing get-entries --modified-only selection through to pr-review-evaluation.yml so a run can score only the dataset entries a pull request adds or changes. Opt-in and default-false, so existing dispatches are unaffected. Also propagates the flag through requeue, which would otherwise re-run the full corpus on repeat>1, and gives modified-only runs their own concurrency bucket so they do not queue behind a full-corpus run.
Sun Haoran (haoranpb)
left a comment
There was a problem hiding this comment.
Search for all places where we use input.test-run, because a modified only run is probably also a test job.
pin-commit should also consume inputs.modified-only, otherwise it will leave behind an ephemeral tag
Similarly, summarize-results
A modified-only run scores a subset of the corpus. Publishing it to Braintrust, Kusto, or the leaderboard would record that subset as a benchmark result, so it now sets the same mock flag a test run does. Requeue is disabled for the same reason, and pin-commit is told not to create an ephemeral tag it would never clean up.
Requeue is now disabled for a modified-only dispatch, so the payload key was unreachable. One run verifies the shape of the new entries; repeated runs are for the full corpus after those entries merge.
|
Thanks — the sweep found a worse problem than the leftover tag, and you were right that a modified-only run is essentially a test job.
|
Sun Haoran (haoranpb)
left a comment
There was a problem hiding this comment.
Good addition!
| default: true | ||
| type: boolean | ||
| modified-only: | ||
| description: "Only evaluate entries added or modified against origin/main (takes precedence over test-run). Scores a partial corpus, so the run never publishes results or requeues." |

Summary
Adds an opt-in
modified-onlydispatch input topr-review-evaluation.ymland wires it to theget-entriesreusable workflow, which already implements--modified-only.This is the entry-selection half of the closed PR #849, resubmitted on its own. The other half of
#849 — an
engine-refinput that overrode the pinned engine at run time — is deliberately notincluded and should stay out: a run-time override lets the recorded pin and the executed pin
diverge, which is the exact property the BC-Bench -> BC-ALAgents -> BCQuality chain exists to
protect, and which PR #851 is hardening by exporting the pinned identity. Moving the engine pin
remains a pull request that edits
install-agent-harnesses/action.yml.Entry selection carries no such hazard.
bcbench dataset list --modified-onlyalready exists(
src/bcbench/commands/dataset.pyL31-52) andget-entries.ymlalready exposes the flag(L8, L49, L63-64); only
pr-review-evaluation.ymlnever passed it through, so the code-reviewcategory had no cheap way to evaluate just the entries a pull request touches.
Motivation: the offline eval gate for self-improvement pull requests (ADO 648887, FP3/FP4) needs to
score the handful of gold answers a candidate adds, not all 144 entries.
Changes
modified-onlydispatch input,default: false. Existing dispatches are byte-for-byte unaffected.get-entries, where it takes precedence overtest-run(existing behaviour ofthat workflow, unchanged).
requeueworkflow-inputsJSON. Without this, amodified-onlyrun withrepeat > 1would silently re-run the full corpus on every requeued pass, because requeuerebuilds the dispatch from that JSON and would have dropped the flag.
modifiedbucket. A gate run setstest-run: false, so it wouldotherwise land in the
fullgroup behind a full-corpus run withcancel-in-progress: false—a gate that queues behind a 144-entry run is not usable as a gate. Runs that do not set
modified-onlykeep their previous group exactly (testorfull).Notes
This matches the convention for workflow-only changes (Add PR review performance telemetry and dashboards #807, Update model selection for nl2al/bcal #826, Add data-query category: AL query-generation benchmark #740, Add extensibility request advisor evaluation #814, Pin and persist LLM judge models #788, Add skill for agent harness version bump #789);
CONTRIBUTING.mdreserves a minor bump for tooling updates that may affect results.evaluate-with-pr-reviewoutputs:block and thesummarize-resultswith:block; this PR edits the dispatch inputs, the concurrency group, theget-entrieswith:block, and the requeue JSON. The hunks are disjoint.Validation
uv run ruff format/uv run ruff checkon the touched test file — clean.uv run ty check . --ignore=unresolved-import --exclude "notebooks/"— 1 diagnostic, pre-existingon
main(src/bcbench/redteam.py:150, unusedty: ignore); unrelated to this change.uv run pytest -q -m "not e2e"— 875 passed, 2 skipped, 1 deselected.yaml.safe_loadof the workflow asserts the file still parses and confirms the resolved inputlist, concurrency expression, and
get-entriesinputs.test_pr_review_workflow_propagates_modified_onlypins both wiring points, including therequeue JSON, so the full-corpus regression above cannot silently return.
git diff --stat— 2 files, 18 insertions, 3 deletions; no formatter noise.