You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The triage skill's held-out eval has regressed to 2/5 (score 0.4) as of the 2026-06-21 scheduled run (run 27901478735, tracked live in #814). All three failures share one root cause: the model under-rates risk by exactly one level, while the escalate boolean is always correct.
case
expected
got
triage-auth-token
escalate:true, HIGH
escalate:true, MEDIUM
triage-db-migration
escalate:true, HIGH
escalate:true, MEDIUM
triage-clean-logic-fix
escalate:false, MEDIUM
escalate:false, LOW
Root cause (verified)
prompts/triage.md rigorously defines when to escalate (criteria 1-7), which is why the escalate boolean is always right. But the risk field appears only in the output schema ("risk": "LOW|MEDIUM|HIGH") — there is no rubric defining what separates the three bands. The model is left to guess, and it guesses low.
scripts/evals/run-eval.sh (lines 161-162) requires bothescalateandrisk to match exactly, so a correct escalation with a one-level-low risk still fails the case.
This is not a label bug
The expected values are internally consistent across all 8 cases (5 holdout + 3 dev) under a single implicit rubric. Note triage-unresolved-thread (dev): it escalates but is MEDIUM, proving HIGH is reserved for dangerous content, not merely "escalated":
band
meaning (derived from the case data)
cases
HIGH
a criterion-1 high-risk area OR a criterion-3 security anti-pattern is present
clean non-trivial logic change, or escalation for process reasons (e.g. unresolved review thread)
clean-logic-fix, unresolved-thread
LOW
trivial change, no logic impact (docs, test-only)
docs-typo, test-only
This rubric predicts 8/8 expected labels. No holdout/dev case edits are warranted.
Proposed fix
Add a ## Risk rating section to prompts/triage.md that encodes the table above, anchored to the existing escalate criteria:
HIGH — any criterion-1 high-risk area is touched, or a criterion-3 security anti-pattern is present.
MEDIUM — escalation driven by process signals (unresolved threads, unaddressed advisory-bot findings, incomplete context), or a clean non-trivial logic/code change that does not escalate.
LOW — trivial change with no logic impact (docs, comments, formatting, test-only additions).
Keep the change additive — one new section. Do not modify criteria 1-7 or the output schema; the escalate behavior is already correct and must stay untouched.
Acceptance criteria
prompts/triage.md gains a ## Risk rating section defining HIGH/MEDIUM/LOW as above; no changes to the escalate criteria.
Skill Eval Report re-run (via workflow_dispatch, skill=triage) scores 5/5 on the held-out set.
Summary
The
triageskill's held-out eval has regressed to 2/5 (score 0.4) as of the 2026-06-21 scheduled run (run 27901478735, tracked live in #814). All three failures share one root cause: the model under-ratesriskby exactly one level, while theescalateboolean is always correct.triage-auth-tokenescalate:true, HIGHescalate:true, MEDIUMtriage-db-migrationescalate:true, HIGHescalate:true, MEDIUMtriage-clean-logic-fixescalate:false, MEDIUMescalate:false, LOWRoot cause (verified)
prompts/triage.mdrigorously defines when to escalate (criteria 1-7), which is why theescalateboolean is always right. But theriskfield appears only in the output schema ("risk": "LOW|MEDIUM|HIGH") — there is no rubric defining what separates the three bands. The model is left to guess, and it guesses low.scripts/evals/run-eval.sh(lines 161-162) requires bothescalateandriskto match exactly, so a correct escalation with a one-level-low risk still fails the case.This is not a label bug
The expected values are internally consistent across all 8 cases (5 holdout + 3 dev) under a single implicit rubric. Note
triage-unresolved-thread(dev): it escalates but is MEDIUM, proving HIGH is reserved for dangerous content, not merely "escalated":This rubric predicts 8/8 expected labels. No holdout/dev case edits are warranted.
Proposed fix
Add a
## Risk ratingsection toprompts/triage.mdthat encodes the table above, anchored to the existing escalate criteria:Keep the change additive — one new section. Do not modify criteria 1-7 or the output schema; the
escalatebehavior is already correct and must stay untouched.Acceptance criteria
prompts/triage.mdgains a## Risk ratingsection defining HIGH/MEDIUM/LOW as above; no changes to the escalate criteria.workflow_dispatch,skill=triage) scores 5/5 on the held-out set.triage(holdout) #814 auto-closes on the recovered run.evals/triage/**case data.References
triage(holdout) #814prompts/triage.mdscripts/evals/run-eval.shevals/triage/holdout/cases.jsonl; dev cases:evals/triage/dev/cases.jsonl.github/workflows/skill-eval-report.yml(daily 07:00 UTC, report-only / non-blocking)