feat: promote skill eval gates to trusted#381
Conversation
|
This is exactly the graduation work I scoped in #352, so it's great to see someone pick it up, especially real fixture-backed evals for every skill plus the gate that rejects provisional ones. Since it's still draft I won't go line by line yet, but the shape is right: fixtures are what make Tier 3 mean something, and enforcing the case minimums is what closes the transition window. Two things I'll want to work through when you flip it out of draft: keeping the CI cost sane if behavioral evals run in the pipeline, and making sure the gate degrades gracefully for contributors who can't run the token-spending tier locally. Really nice contribution to the framework. |
|
Thanks! The PR is now ready for review. On the two points you mentioned: CI only runs the deterministic runner tests and Tier 2 with the Happy to adjust that boundary based on the line-by-line review. |
|
This is the real graduation, nice work. Fixtures for all 25 skills, the runner getting its own unit tests (run-evals-test.js) that I didn't even ask for, and keeping the token-spending tier out of CI while gating the deterministic run on a --min-rank1 floor is exactly the right split. The patch-backed dirty-worktree fixtures for the git skills are a nice touch. Two things before I merge. First, --min-rank1 85 against an actual 86 is a single point of headroom, tight enough that an unrelated description tweak could trip CI red; I'd either give it a bit more slack or make it explicit that bumping the floor is expected maintenance. Second, and bigger: flipping provisional-rejection and the minimums to hard errors raises the bar for every in-flight skill PR the moment this lands. #360 is the immediate casualty, its collaborative-mode eval is provisional with no fixture, and interview-me is genuinely hard to fixture since it's a dialogue rather than a code task. So before this closes the door I want a real answer for how conversation-shaped skills clear the trusted gate. I also owe run-evals.js itself a proper read since this is a big change to code I wrote, so give me a bit on that. |
|
Following up on the dialogue-skill concern, here's a concrete exemption that unblocks it, and I tested it against your branch. The idea: give each behavioral eval a The gate change is small: const kind = ev.kind || 'execution';
const fixtureRequired = kind !== 'dialogue';
const hasFiles = Array.isArray(ev.files) && ev.files.length > 0 && ev.files.every((x) => typeof x === 'string');
if (fixtureRequired && !hasFiles) { /* error: needs files[] */ }
// provisional only rejected for execution evals; dialogue is trusted by transcript
if (fixtureRequired && ev.trust_level === 'provisional') { /* error */ }I ran it with interview-me switched to fixtureless dialogue and the suite stays green (124 checks, 86% rank-1), and confirmed a code eval with its fixture stripped still fails, so execution skills keep the hard requirement. It also unblocks #360: its collaborative-mode eval just becomes |
|
Thanks — I folded both points into 087033d.
I added runner coverage for fixtureless dialogue evals, missing execution fixtures, provisional execution evals, unknown kinds, and dialogue dry-runs. Validation is green:
This should let #381 land first, then #360 can rebase and mark its collaborative-mode eval as |
Summary
kind: "dialogue"path for conversation-shaped skills--min-rank1deterministic routing floorFixes #352
Validation
node --test scripts/run-evals-test.js— 12/12 passingnode scripts/run-evals.js --min-rank1 80— 124 checks passing, 86% rank-1node scripts/validate-skills.js— 24 skills, 0 errors/warningsnode scripts/run-evals.js --behavioral interview-me --dry-runnode scripts/run-evals.js --behavioral idea-refine --dry-run