fix(benchmark): keep the answer key out of the worker's reach #322

Merged
che-guevara merged 1 commit from fix/benchmark-run-isolation into main 2026-11-10 15:05:46 +00:00
Collaborator

Vor der ersten Messung am laufenden System gefunden.

Drei Leckklassen machten eine Suite messbar, aber nicht vertrauenswürdig:

  1. Preflight materialisierte die Referenzlösung in runDir (../preflight/-/solved/store.js) — ein Worker lief eine Ebene hoch und hatte die Lösung.
  2. Bei capacity: 1 blieb der gefixte store.js des Vorgänger-Falls unter ../-/ für jeden späteren Worker liegen.
  3. record.json (aus dem Workspace als ../../record.json erreichbar) enthielt den vollständigen Verifier-Befehl, also die Inline-Grading-Logik.

Fix: Preflight läuft unter benchmark/evidence/<run>/preflight und wird im finally gelöscht; bewertete Workspaces ziehen nach benchmark/evidence/<run>/workspace um (outcome.workspace zeigt dorthin); im Record steht nur noch sha256:<fingerprint> des Verifiers; Run-Bäume werden 0700 angelegt.

Zwei Regressionstests prüfen während eines laufenden Workers: keine Datei unter runDir enthält den Referenztext, und das Workspace-Parent enthält exakt den laufenden Fall. Suite: 1746 Tests, 1745 pass, 0 fail, tsc clean.

Vor der ersten Messung am laufenden System gefunden. Drei Leckklassen machten eine Suite messbar, aber nicht vertrauenswürdig: 1. Preflight materialisierte die Referenzlösung **in** `runDir` (../preflight/<case>-<n>/solved/store.js) — ein Worker lief eine Ebene hoch und hatte die Lösung. 2. Bei `capacity: 1` blieb der gefixte `store.js` des Vorgänger-Falls unter ../<other-case>-<repeat>/ für jeden späteren Worker liegen. 3. `record.json` (aus dem Workspace als ../../record.json erreichbar) enthielt den vollständigen Verifier-Befehl, also die Inline-Grading-Logik. Fix: Preflight läuft unter `benchmark/evidence/<run>/preflight` und wird im `finally` gelöscht; bewertete Workspaces ziehen nach `benchmark/evidence/<run>/workspace` um (`outcome.workspace` zeigt dorthin); im Record steht nur noch `sha256:<fingerprint>` des Verifiers; Run-Bäume werden 0700 angelegt. Zwei Regressionstests prüfen während eines laufenden Workers: keine Datei unter `runDir` enthält den Referenztext, und das Workspace-Parent enthält exakt den laufenden Fall. Suite: 1746 Tests, 1745 pass, 0 fail, tsc clean.
Three leak classes made a suite measurable but not trustworthy:

- preflight materialized the reference solution inside runDir, one directory
  above the live workspace (../preflight/<case>-<n>/solved/store.js)
- with capacity 1 the predecessor case's solved store.js stayed at
  ../<other-case>-<repeat>/store.js for every later worker
- record.json, reachable as ../../record.json from the workspace, stored the
  full verifier command, i.e. the inline grading logic

Preflight now runs under benchmark/evidence/<run>/preflight and is removed in a
finally block; a graded workspace is moved to benchmark/evidence/<run>/workspace
and outcome.workspace points there; the record keeps only sha256:<fingerprint> of
the verifier; run trees are created 0700. Two regression tests assert that during
a live worker run no file under runDir contains the reference text and that the
workspace parent holds exactly the running case.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
harness/core!322
No description provided.