Repository navigation
Conversation
…changes Adds the Smoke eval workflow, --max-cost, --subset and --precision off to evals/run.ts, and evals/smoke.ts to compare a run with evals/baseline-smoke.json and scan evals/out for secrets before it's uploaded. Refs #52
There was a problem hiding this comment.
🤖 NCode Review at 7517ea0: 6 new findings on the changed lines.
Not on a changed line:
- 🟠 F3 Should fix: No test for
--precision offevals/run.ts:183. When precisionOn is false, the run skips judgePosted and totalPrecision, leaves precision undefined and omits the precision line. No test exercises any of this. Fix: Move the per-case precision decision into an exported helper, or test with a stubbed realityJudge that precision is undefined and the judge is never called when precision is off.
🤖 Review completeVerdict: 💬 Comment — This PR adds a cost-capped smoke eval workflow that runs on pushes to main that change prompts, charters, models or guidance. It also adds 8 reviewers run — 8 findings (run details)
Skipped: api-compat, data-model, infrastructure, intent, performance Findings
Trial: findings are posted as review threads and in the check run. $0.67 on Amazon Bedrock, 80s, at dae21e6. (how to interact) |
…recision off Moves the check command's file reading and writing into checkFiles and baselinePathFrom, and the per-case precision decision into casePrecision and parsePrecision, so each can be tested; names the --max-cost argument before parsing it.
|
Autopilot: answering #80 (review) and the summary at #80 (comment).
|
|
/review |
There was a problem hiding this comment.
🤖 NCode Review at 25d1086: 5 new findings on the changed lines.
1 more was already posted on this pull request.
…ng out of main() capOutcome decides what the summary records and the error that fails an over-budget run; maxCostFrom reads the flag from argv. The unknown-case error points at evals/cases.json, and checkFiles is checked on a run that matches its baseline.
|
Autopilot: Round 2 answered. No blocker or should-fix is left open; the remaining threads are nits, answered above. Recommend merging once you've resolved them. The should-fix (F1, the |
|
/review |
There was a problem hiding this comment.
🤖 NCode Review at 2da07ec: 6 new findings on the changed lines.
1 more was already posted on this pull request.
# Conflicts: # evals/run.ts
selectCases dropped empty ids, so --only '' or --only ',' ran zero cases and passed.
|
Autopilot: Round 3 answered. The review-round limit (3) is reached; no blocker or should-fix is left open. The should-fix (F1, an empty |
There was a problem hiding this comment.
🤖 NCode Review at dae21e6: 5 new findings on the changed lines.
3 more were already posted on this pull request.
# Conflicts: # CHANGELOG.md # evals/run.ts
# Conflicts: # CHANGELOG.md # evals/run.ts
|
Autopilot: Round 4 answered. The review-round limit (3) is reached; no blocker or should-fix is left open. The five new threads (F1–F4, F6) are nits, declined above; F6 would undo round 1's |
Stacked on #73; GitHub retargets this to main when #73 merges.
Adds
.github/workflows/smoke-eval.yml: on a push tomainthat changesprompts/**,reviewers/**,src/config.tsorguidance/**, and byworkflow_dispatch, it runs 4 eval cases in thecode-reviewenvironment (never onpull_request;permissions: {}at the top,contents: read+issues: readfor the job; actions pinned by SHA).node evals/smoke.ts checkcompares the run withevals/baseline-smoke.jsonusing #73'scompare(), posts the table to$GITHUB_STEP_SUMMARY, and fails when caught drops by more than 2, the must-not case is flagged, or the case sets differ.node evals/smoke.ts scan evals/outrunsassertNoSecretson every file before the upload.evals/run.tsgains--max-cost <usd>(stops after the case that crosses it, writes what ran, exits 1),--subset smoke(the named subset inevals/cases.ts) and--precision off. All of it is unit-tested hermetically intest/smoke-eval.test.ts.npm run typecheckandnpm test(190 tests) pass.Decisions:
accepted-no-backfill(the must-not case),heap-allocation-key-export(large diff: 43 files, about 2,600 changed lines, 161 KB),secret-buffer-lengthandtest-gap-newest-summary-selection(small C# and TypeScript). I didn't pick the 2 MB #420 cases because one of them alone costs $6–7. The subset has 3 expected concerns, so "caught drops by more than 2" fails only when all 3 are lost. That is the spec's threshold (Evals: measure precision and findings per pull request, and compare two runs #73's noise limit).evals/baseline-smoke.jsonis missing, the job passes with a::noticeand the run is still uploaded. It still fails on a flagged must-not case, since that check doesn't need a baseline. Every run writesproposed-baseline-smoke.json(the run without agent calls and raw findings) into the artifact. The README says how to adopt it.--guidance full, becauseguidance-holdout/is derived, gitignored and costs a training run to build. It uses--precision offbecause the precision judge makes uncached Opus calls at up to $1.50 each and would exceed $8; the gate reads only caught and must-not.compare's note now says a missing precision may mean--precision off, and states the cost caveat only whenreviewCostUsdis missing.--max-costis checked between cases, since a half-finished review has nothing to score, so a run can overshoot by up to one case.--onlynow also fails on an unknown case id, so the subset can't quietly shrink.GH_TOKEN(the job token) lets the eval read the issues a case's PR closes. Agents still get the scrubbed environment fromsrc/agent.ts.Remaining (paid runs, not done):
prompts/synthesis.mdtomainand confirm the smoke eval costs under $8 and shows the comparison. If it goes over, swap a case insubsets.smokeor raise the cap.proposed-baseline-smoke.jsonasevals/baseline-smoke.jsonin a follow-up PR.src/publish.tsdoesn't start the workflow.Refs #52