Skip to content

test(e2e): add self-modification eval harness - #3327

Draft
benpankow wants to merge 2 commits into
mainfrom
benpankow/selfmod-eval-harness
Draft

benpankow wants to merge 2 commits into
mainfrom
benpankow/selfmod-eval-harness

Conversation

@benpankow

Copy link
Copy Markdown
Collaborator

Summary

Adds a dedicated self-modification eval fixture and shared harness for following the background child, rebuilding edited source, and restoring the fixture afterward. The self-mod child stays fixed on Claude Sonnet 5 while routing runs across the normal root-model matrix plus optional models from the authoring benchmarks; the slower tool-authoring flow runs once. Local-only fixtures can now opt out of world matrices so this does not add empty Vercel and Postgres legs.

Depends on #3278.

Validation

The routing and tool-authoring evals passed locally with openai/gpt-5.6-sol; routing also passed with anthropic/claude-opus-5. Adds focused tests for fixture world selection.

🤖

@vercel

vercel Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
eve-docs Error Error v0 Sep 14, 2026 1:55pm UTC
eve-docs-4759 Error Error v0 Sep 14, 2026 1:55pm UTC
eve-pkg Error Error v0 Sep 14, 2026 1:55pm UTC

@socket-security

socket-security Bot commented Sep 14, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​workflow/​world-postgres@​5.0.0-beta.419810010097100

View full report

"A root model routes a persistent capability request to self-mod, which creates a callable eve tool.",

async test(t) {
if (process.env.EVE_E2E_MODEL !== "openai/gpt-5.6-sol") {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Run this eval for the fixture’s default model

test:e2e invokes eve eval --strict without setting EVE_E2E_MODEL, while e2eModel() resolves an unset value to openai/gpt-5.6-sol. This raw comparison therefore skips the only eval that authors, rebuilds, and invokes the new tool during the normal fixture command, even though the agent is using the intended model. Normalize the unset value to the shared default, or reuse the shared model resolver before applying this guard.

try {
await test(harness);
} finally {
await harness.reset();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Stop background work before restoring source

The parent launches self-modification as a background task, but this finally block restores /source without resetting the parent session. If request() fails while the child is still running, the child can write after this reset and rebuild, contaminating the next serial eval. Normal eval errors do not call manager.cleanup(); the existing background-steering eval resets its parent session in finally because reset owns admitted tasks. Retain the parent session ID and reset it before restoring the source snapshot and rebuilding.

@@ -0,0 +1,49 @@
import assert from "node:assert/strict";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P3] Wire this test into CI

This node:test file is not reached by pnpm test:unit: that command runs package-level Turbo tasks, and .github is not a workspace package. The e2e workflows execute the discovery script, but none invokes this test file. These four world-selection assertions can therefore regress without failing CI. Add an explicit node --test .github/scripts/discover-e2e-fixtures.test.mjs step or include it in a checked-in test command.

Base automatically changed from test/selfmod-native-tool-eval to main September 14, 2026 13:54
Signed-off-by: benpankow <ben.pankow@vercel.com>
Signed-off-by: benpankow <ben.pankow@vercel.com>
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.

1 participant