Problem
Eval fixtures can be discovered with nested paths under evals/ (e.g. ui-development/design-system/layout), and saveResults correctly writes results under a matching nested directory tree beneath each timestamp.
However - housekeep and scanReusableResults only list the immediate children of the timestamp directory and treat each name as the full eval id. For nested evals, the first segment (e.g. ui-development) is not the eval result root: summary.json lives deeper (e.g. …/ui-development/design-system/layout/summary.json).
My project organization:
evals/
ui-development/
design-system/
layout-props/
PROMPT.mdSo fixture / eval names look like ui-development/design-system/layout-props
On disk, saveResults produces results/<experiment>/<model>/<timestamp>/
ui-development/design-system/layout-props/
summary.json
run-1/
result.json
transcript.json
…But housekeep only does readdir on /, gets e.g. ui-development, and then checks
isComplete(join(tsDir, 'ui-development')) to look for …/ui-development/summary.json which is missing so it returns false.
<timestamp>/ui-development/summary.json → does not exist → treated as incomplete → rmSync('/ui-development', { recursive: true }) wipes the entire nested tree.
Proposal
Under each timestamp, discover eval result directories by walking until directories that contain summary.json (or equivalent), and use relpath from the timestamp dir as the eval key so it matches fingerprints and saveResults. Apply the same fix to scanReusableResults in results.js, which uses the same one-level readdir + join(tsDir, evalDir, 'summary.json') pattern.
Environment
@vercel/agent-eval 0.14.0 (npm) Nested evals/ as above; run-all with classifier enabled reproduces post-run deletion after housekeep.
Activity
0No activity yet.