Skip to content

feat(metric-benchmark): correlate matched subset scores - #97

Open
mstaats-nvidia wants to merge 1 commit into
feat/metric-benchmark-coveragefrom
feat/metric-benchmark-correlation
Open

mstaats-nvidia wants to merge 1 commit into
feat/metric-benchmark-coveragefrom
feat/metric-benchmark-correlation

Conversation

@mstaats-nvidia

@mstaats-nvidia mstaats-nvidia commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Correlate coverage and mutant scores by exact subset and experiment context, using average ranks for ties. Preserve paired observations, explicit exclusions, and input digests. Constant ranks and fewer than two paired subsets produce an unavailable coefficient with a reason.

correlate.py is a thin CLI over correlate; it consumes the two score artifacts and the explicit missing-pair policy. It needs neither execution settings nor executable inputs. The coordinator passes the policy from analysis.yml.

Usage and library API: labs/metric-benchmark/docs/correlate.md.

Earlier full-suite validation (before the signing follow-up): 3,082 tests, 29 skipped, plus Ruff/format, type checks for Python 3.12/3.13, copyright, license and whitespace checks.

Real pressure test: maintained Rho Agent baseline + an action-budget mutant × three Terminal Bench 2.0 tasks (regex-log, log-summary-date-ranges, polyglot-c-py). All six trials completed without runtime errors after pinning the common runtime to Python 3.12 and a dependency cutoff matching Rho’s lockfile era. The initial unpinned run exposed upstream installation failures and was preserved separately. Both agents passed 2/3 tasks. Mutant activation was recorded in every mutant trace.

A model authored a tool-only audit; the real Eval Author generation, measurement and reporting tools computed coverage for four fixed subsets (0.25, 0.50, 0.50, 0.50). All mutant scores were zero, so correlation correctly returned unavailable (constant score ranks). This exercises the pipeline, not scientific metric validity or semantic-judgment coverage.

Verified native validation, completed execution resume with no new Harbor calls, byte-identical cached analysis, standalone CLI/coordinator parity, and changed analysis with executable agent bundles and task environments removed. Saved execution evidence remained byte-identical. Raw evidence and credentials remain outside Git.

Stack: main (includes merged #157 configuration separation) → #95 mutant scores → #96 coverage → #97 correlation → #99 coordinator. These four PRs are ready for review; GitHub stack #158.

Signing transition follow-up

Case identity now uses the same canonical content digests as execution identity. Adding pins to unchanged inputs preserves resume, validation and scoring; changed agent/task content still fails. Signed metadata can analyze the saved run after executable inputs are removed. Missing execution rows must contain an explicitly unavailable metric.

Current follow-up validation: 178 benchmark tests passed, 1 skipped; Ruff/format, type checks on Python 3.12/3.13, copyright, license and whitespace checks passed. Regression coverage exercises a genuinely unsigned execution followed by signing, unchanged evidence on resume, rejection of modified agent/task contents, standalone scoring and full analysis without executable inputs. Hashing optimization is deferred. No new live model or Docker trials were needed for this follow-up. Downstream PRs are rebased; all are ready for review.

Rebased after #157 merged: 178 benchmark tests passed, 1 optional test skipped; Ruff/format and type checks for Python 3.12/3.13 passed at the coordinator tip. Incremental PR patches are unchanged.

@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from f311eb8 to dff36b6 Compare October 21, 2026 20:22
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch 2 times, most recently from 8082251 to 913bc3b Compare October 21, 2026 21:08
@mstaats-nvidia mstaats-nvidia changed the title feat(metric-benchmark): correlate matched coverage and mutant scores feat(metric-benchmark): correlate matched subset scores Oct 21, 2026
@mstaats-nvidia
mstaats-nvidia added this pull request to stack #107 October 21, 2026 21:10
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 913bc3b to 5dde419 Compare October 23, 2026 14:33
mstaats-nvidia added a commit that referenced this pull request Oct 23, 2026
Defines an experimental benchmark for evaluating how well our coverage
metric predicts evaluation effectiveness through mutation testing.

The concise [root
README](https://github.com/NVIDIA-NeMo/eval-author/blob/docs/metric-benchmark-design/labs/metric-benchmark/README.md)
describes the project, its work-in-progress status, and the expectation
that case examples will grow, change, or be dropped as we build in plain
sight. Prep is external to this repository; runs consume prepared case
examples, fixed subset manifests, and a YAML benchmark definition.

The [stage
descriptions](https://github.com/NVIDIA-NeMo/eval-author/blob/docs/metric-benchmark-design/labs/metric-benchmark/docs/stages.md)
focus on four executable stages: run mutants × eval tasks, compute
mutant scores, compute coverage, and correlate the score pairs. The
first execution script will be a basic local Harbor loop; NeMo Helix
support is planned afterward. The [architecture and both SVG
figures](https://github.com/NVIDIA-NeMo/eval-author/blob/docs/metric-benchmark-design/labs/metric-benchmark/docs/architecture.md)
explain the inputs, component boundaries, shared results directory, and
statistical comparison.

This is the documentation-only base of the stack. Implementation PRs #94
→ #105 → #106 → #95 → #96 → #97 → #99 inherit the overview and design
unchanged. Their detailed CLI guide lives separately in `docs/tools.md`.

Validation: the five files in this PR are Markdown/SVG only. Local links
and anchors, Markdown fences, headers, SVG XML, and whitespace checks
pass; the updated figure was rendered and visually inspected. Restacking
preserves all source and test files byte-for-byte. No live evaluations
or model calls were made.
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 5dde419 to c3d31df Compare October 23, 2026 14:42
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from c3d31df to 2505187 Compare October 26, 2026 12:32
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 2505187 to a050306 Compare October 26, 2026 13:43
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch 2 times, most recently from 5e8016d to e5e1a94 Compare October 26, 2026 19:19
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from e5e1a94 to 2d77adb Compare October 27, 2026 10:24
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch 2 times, most recently from 0dff0bb to b8911d7 Compare October 27, 2026 16:43
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from b8911d7 to 2dcd424 Compare October 27, 2026 21:04
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 2dcd424 to 71e6b1f Compare October 28, 2026 08:43
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch 2 times, most recently from 75f2728 to 47dc1fd Compare October 28, 2026 13:01
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch 2 times, most recently from 0eb4e76 to 11563e1 Compare October 29, 2026 12:58
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 11563e1 to 996d706 Compare October 29, 2026 14:27
@mstaats-nvidia
mstaats-nvidia removed this pull request from stack #107 October 29, 2026 14:28
@mstaats-nvidia
mstaats-nvidia added this pull request to stack #158 October 29, 2026 14:28
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 996d706 to e8ecaf7 Compare October 29, 2026 14:40
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from e8ecaf7 to 597b8c9 Compare October 29, 2026 15:26
@mstaats-nvidia
mstaats-nvidia marked this pull request as ready for review October 29, 2026 15:33
@mstaats-nvidia
mstaats-nvidia requested a review from a team as a code owner October 29, 2026 15:33

@aleckhoury aleckhoury left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correlation looks right.

  • Compared spearman with scipy.stats.spearmanr over 20,000 random cases (n = 0..12, both continuous and heavily tied inputs). Maximum absolute difference was 3.3e-16, and the two agreed on every case where no coefficient can be computed.
  • Matching on exact subset ID plus an identical Context is a safe join, because both inputs build Context with scoring.context().
  • missing_policy values and the default match config.py and the CLI.
  • The caveat that n = 2 always gives ±1 is documented.

At this head: 163 passed, 1 skipped.

Signed-off-by: mstaats <mstaats@nvidia.com>
@mstaats-nvidia
mstaats-nvidia force-pushed the feat/metric-benchmark-correlation branch from 597b8c9 to 8e4ee0f Compare October 30, 2026 21:36

This branch has not been deployed

No deployments
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.

3 participants