chore(eval): bring the mapping evaluation harness into the repo - #59
Merged
Conversation
These five scripts score the project mapper against the human labels instead of running it, and they were the only measurement tooling this project had. They lived in videos/, which is gitignored, so a single `git clean -x` would have taken all of them. Ported unchanged apart from the repo root: each hardcoded an absolute path to one developer's checkout, now resolved from import.meta.dirname. Their logic is untouched, including the parts biome dislikes, so the diff against the originals stays reviewable. They are deliberately not tests. The suite in src/__tests__ injects fake judge/embed functions and never hits the network; these call the real model and read private, gitignored corpus data, so they cannot run in CI and are not wired into it. docs/eval-harness.md records what each one measures, what it needs, and the two measured cases where adding facets raised prefilter reach while lowering end-to-end F1.
Single Commit Policy — COMPLIANTStatus: 1 commit | Valid format | No merge commits | Ready for merge Commit details
Automated validation — dopamine single-commit enforcement |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Five scripts that score the project mapper against the human labels in
videos/labels.jsoninstead of running it. They were the only measurement tooling this project had, and they lived invideos/— which is gitignored, so a singlegit clean -xwould have taken all of them.npm run eval:judgenpm run eval:facetsnpm run eval:portfolionpm run eval:triagenpm run eval:relabelThese are not tests, and are not wired into CI
The suite in
src/__tests__injects fakejudge/embedfunctions and never touches the network, which is what keeps it fast and deterministic. These do the opposite on purpose — they call the real model, because the question they answer is how good the real judge is. A fulleval:judgearm is roughly 165 paid Vertex calls and needs four gitignored private inputs (search.db,labels.json,triage.json,projects.json). A fresh clone cannot run them, and that is the intended state rather than a gap to close.What changed in the port
Only the repo root. Each script hardcoded an absolute path to one developer’s checkout; that is now
path.resolve(import.meta.dirname, ".."). Logic is otherwise untouched — including the partsbiomedislikes — so the diff against the originals stays reviewable. (biome check .already fails onmain, andlint-stagedonly runsbiome format, so this introduces no new gate failure.)Why it matters beyond durability
docs/eval-harness.mdrecords the two measured cases where adding facets raised prefilter reach while lowering end-to-end F1 — most starkly, auto-derived Breeze facets took its false positives from 1 to 17, the worst of any project in that session. That caution previously existed only as a comment inside a gitignored file.Verification:
npm run buildand the full suite (55 files, 476 tests) pass via the pre-commit hook.eval:relabel(the one harness making no paid calls) runs correctly post-port — 30 videos, 77 candidate decisions. Every${R}-relative path resolves.markdownlintclean on the new doc; the README edit adds 0 new errors. Scanned for absolute paths and credentials — clean.