Skip to content

feat(evals): ADR-0011 D3 held-out oracle (hidden inject-at-grade) - #108

Open
codexceed wants to merge 4 commits into
feat/evals-heldout-measurementfrom
feat/evals-heldout-d3
Open

codexceed wants to merge 4 commits into
feat/evals-heldout-measurementfrom
feat/evals-heldout-d3

Conversation

@codexceed

Copy link
Copy Markdown
Owner

Description

Stacked on #107 — the richer held-out oracle for the declared-verification feature: a hidden, per-test partition (ADR-0011 D3) injected only at grade time, so the agent can't special-case a test it never saw.

Review after #106 → #107; the diff collapses to just the evals/ D3 changes once those merge.

Motivation

A single success_probe is one hidden script. ADR-0011 D3 generalizes it to a partitioned fail_to_pass/pass_to_pass oracle held out of the agent's repo entirely — the strongest anchor for grading a model that can auto-approve its own contract (ADR-0039): even a gamed self-contract can't touch a test that was never in the workspace.

Changes

  • evals/provision.py: provision(hidden=...) strips oracle files from the seeded scratch repo before the baseline commit — withheld from the agent.
  • evals/score.py: held_out_verdict copies the final repo to a throwaway, injects the hidden oracle files, runs fail_to_pass + pass_to_pass there — True/False, or None when no D3 oracle is declared. The agent's repo and diff stay untouched.
  • evals/run.py: prefers the D3 verdict and expresses it on the probe axis (pass→exit 0, fail→exit 1), so solved / held_out_passed / gamed_rate / classify all read the held-out signal through one path with no downstream changes. D3 tasks run non-strict (graded by the oracle).

Testing

  • tests/test_evals.py: provision withholding; held_out_verdict (correct passes, broken fails, no-oracle → None, throwaway isolation); and an end-to-end run_task test where a model that claims done but whose code fails the hidden oracle is classified gamed.
  • Full make check green — 637 passed.
  • Grader-touching (ADR-0011/0040): offline TDD green; the mandatory global python -m evals.diff validation is a live run, to be run before the ADRs flip Proposed → Accepted.

A task can now declare a hidden per-test oracle the agent never sees:
withheld at provision, injected into a throwaway copy of the final repo
at grade time, run there so the agent's repo/diff stay untouched.

- provision(hidden=...) strips oracle files from the seeded repo.
- score.held_out_verdict: copy -> inject oracle -> run fail_to_pass +
  pass_to_pass; True/False, or None when no D3 oracle is declared.
- run_task prefers the D3 verdict and expresses it on the probe axis
  (pass->0, fail->1), so solved/held_out_passed/gamed/classify all read
  the held-out signal through one path; D3 tasks run non-strict.

Grader-touching (ADR-0011/0040): offline TDD green (incl. an end-to-end
gaming-detection test); the global evals.diff validation is a live run.

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.

2 participants