Repository navigation
Run base-tests and cross-tests for each pair of Trials - #1943
Merged
Merged
Conversation
After both Arms' Trials of a pair finish, run each Arm's new test files on the unchanged base and against the other Arm's final commit, offline in the code-Grader sandbox under the Bar's timeout, reusing the process Grader's export and overlay. A task opts in with process_grading.new_tests (patterns and a per-file command). Results are kept per pair as evidence, never Scores, and shown as the Experiment's pairs (result format 9), in the text view and on the Console page. Closes #1881
A timed-out run or an unpreparable snapshot no longer reads as new tests failing on the base or as a cross-test disagreement: the code Grader now says whether each check ran to an exit status, and such runs leave the result null. Document per-field null rules, show unfinished runs in the text view and Console, and share the HEAD lookup and attempt discovery.
This was referenced Nov 10, 2026
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
After the Trials, each pair (Baseline Trial k with Candidate Trial k) gets base-tests and cross-tests, as evidence beside the Scores:
A task opts in through its manifest. The Spec doesn't say how an Arm's new tests are found or run, so this adds:
The Experiment view's result format goes from 8 to 9, adding
pairs. EachPairSidehastest_files,fails_on_base,passes_on_other,disagreement,base/crosschecks anderror.docs/eval-tasks.md,docs/experiment-results.md, the guide, the glossary (Base-test, Cross-test), code navigation and the three hand-written site pages.Evidence
Execution evidence
cargo test --test experiments pairs::on the unchanged code, with the new tests added:each_arms_new_tests_run_on_the_base_and_the_other_arms_commitchecks that the JSON shows, per Arm, whether its new tests fail on the base and pass on the other Arm's commit.disagreement: truewhile both Scores still pass.new_tests_run_offlineruns under bwrap, which was present and not skipped.new_tests_share_the_bar_timeout.cargo test --test experiments: 169 passed.tests/console/experiments.rs: Pair evidence section and OpenAPI format 9.npm test --prefix siteandnpm test --prefix console: pass.npm run docs:check --prefix site: pass.cargo clippy --all-targets: clean.scripts/affected-tests refs/remotes/origin/issue-1872(full suite):tests/process.rsfindings::merged_fix_is_rechecked_after_a_later_fix_fails(Security fix publishing). It fails in this worktree only.issue-1872, so local worktree state causes it, not this change.tests/process.rswere then run with--no-fail-fast: all 51 pass.Visual evidence
Before/After captures of the Console Experiment page with one retained pair. They are at 1440×900 and 390×844, made with Playwright's Chromium against the
issue-1872build and this branch.They could not be published: this session's permission settings blocked uploading them to a secret Gist. They stay local at
/tmp/before-desktop.2boKEZ.png//tmp/after-desktop.26EK0P.png(desktop) and/tmp/before-mobile.J4IfoE.png//tmp/after-mobile.5fKWVh.png(mobile).Merge Danger
Door: two-way
new_tests.pairs: [].Blast Radius: Experiments
format: 8must accept 9; the OpenAPI const and docs moved together.Review
Two-axis review against
refs/remotes/origin/issue-1872.Standards raised 15 findings.
Run→GraderRunpart), 10, 11, 12 (Ran→CheckRun,exited) and 15.a_missing_other_arm_keeps_the_base_test_and_names_the_errorreplaces it, and its run does seterror.an_unpreparable_snapshot_decides_nothing.Spec raised 5 findings.
a_timed_out_base_run_is_not_reported_as_failing_on_the_basefailed as described and is kept, and finding 7 (the test name).Unread changed files: none.
site/docs/index.htmlis generated output, excluded by both reviewers afternpm run docs:check --prefix sitepassed, and not read.Unaddressed findings
Standards
Pairis the format-9 contract record (docs/experiment-results.md:426), andIdentityalso carries an Arm.pairs::runnow builds theIdentitys once (src/evals/experiment/pairs.rs:65). No further change.disagreementduplicatespasses_on_other. The acceptance criterion asks that "A cross-test failure is shown as a disagreement". The contract states the field is true exactly whenpasses_on_otheris false (docs/experiment-results.md:77,src/evals/experiment/pairs.rs:274).GLOSSARY.md:412,GLOSSARY.md:416). "Pair evidence" is only a section heading.src/evals/experiment/store.rs:169.executeas Middle Man overexecute_runs.executekeeps the API for its caller atsrc/evals/experiment/grading.rs:79, so Scores'Checkshape and callers stay untouched.src/sandbox/code_grader.rs:85).Spec
docs/eval-tasks.md:139). The reviewer read it as intended.Closes #1881
Built with claude 2.1.314 · opus · default effort
Security review outcome
No unaddressed introduced findings.