benchmark: triage first — advise before code is written; every output leads with the decision (0.4.0) - #33
Conversation
… leads with the decision (0.4.0) Triage — "should this lecture be converted at all?" — becomes the skill's front door: SKILL.md leads with it behind a Which-mode router, the frontmatter description opens with the advise use case so natural-language invocation matches the common question, and the README puts it first throughout. Review mode is unchanged and stays for the day a conversion PR exists again. Recommendation-first output everywhere (skills#14, finding 6): score.py prints VERDICT above the weighted total, labels the total "for the record", and the deciding-flip lines name the verdict they flip to before the recomputed number; the report format's TL;DR opens with the full verdict and the dimension table gains a verdict row. The tutorial's quoted output follows. No rubric, weight, gate, or scorecard-JSON change: the regression anchors and fixtures reproduce unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR reframes the benchmark plugin’s review-acceleration skill to be triage-first and makes the scorer/reporting output recommendation-first (verdict printed before the weighted total), while bumping the plugin version to 0.4.0 and updating docs accordingly.
Changes:
- Updated
score.pyoutput ordering and sensitivity “deciding flips” lines to lead with the verdict and treat the weighted total as “for the record”. - Reordered and revised skill/docs/README content so triage is presented as the default entry point and outputs emphasize the decision first.
- Released as
benchmarkv0.4.0 with matching manifest/version updates and changelog entry.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| docs/tutorial-run-an-evaluation.md | Updates the tutorial’s quoted scorer output and explains verdict-first semantics. |
| benchmark/skills/review-acceleration/SKILL.md | Reorders the skill doc to triage-first and reinforces “decision-first” reporting. |
| benchmark/scripts/scoring/score.py | Prints VERDICT: before the weighted total; updates deciding-flip display text. |
| benchmark/README.md | Reorders mode presentation to put triage first; updates review-mode description to match decision-first outputs. |
| benchmark/CHANGELOG.md | Adds 0.4.0 release notes describing the triage-first reframing and verdict-first output. |
| benchmark/.claude-plugin/plugin.json | Bumps plugin version to 0.4.0. |
| .claude-plugin/marketplace.json | Bumps marketplace entry for benchmark to 0.4.0. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The canonical "when to use JAX / when not to" guidance already exists — manual.quantecon.org/styleguide/jax.html, including Converting from Numba § Decide first. Triage now cites it rather than restating it, and frames its four checks as the measurement layer that tests whether the page's criteria hold for a given lecture. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…on convert / don't-convert The rule re-derived numbers from the rubric weights (0.15/0.25, +0.30, −0.50) in SKILL.md and README.md while the skill's own scoring step says weights live only in EVALUATION_FRAMEWORK.md — a drift risk if the rubric is recalibrated. Both places now state the conclusion and point at the framework. Triage's outcome vocabulary is convert / don't-convert throughout, replacing the review-mode "predicted verdict band". From Copilot's review of this PR. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@xuanguang-li — requesting your review on this PR, as the designer of the evaluation system it reorders. Context is in the description above and on #10; the short version: triage ("should this lecture be converted at all?") becomes the skill's front door, and every output now leads with the recommendation rather than the number — your two comments on #10 are the documented evidence for that second change. What we would most value your judgement on, in order:
No urgency on the rubric-confirmation items from the #10 checklist — this PR is the priority ask, and none of it forecloses those. |
|
Thanks @mmcky. This summary is helpful! I'll look into it tonight. |
|
Hi @mmcky, Thanks for this update.
|
|
Thanks @xuanguang-li — appreciated, especially the check that the scoring pipeline is untouched. On 1: that is the intended default — a bare lecture with no PR or refs reads as "should this be converted at all?", which is triage's question, so it goes first. But you're right that the choice was made silently; having the skill state which mode it picked and why (and ask when it's genuinely ambiguous) is a fair refinement, and worth a small follow-up rather than holding this PR. On 3: agreed — the qualitative rule is written for the current no-scaffold triage, so it stands or gets revised together with Finding 2 in #7 when that decision is made. I'll merge this as-is and tag benchmark 0.4.0. |
Reframes the benchmark skill around the question the org actually keeps asking, without removing anything: triage — "should this lecture be converted at all?" — becomes the front door, and review mode stays intact for the day a conversion PR exists again.
Why
Two grounds, both measured rather than aesthetic.
The demand is on triage's side. Every conversion-PR route the acceptance test was waiting on closed in one sweep: on 2026-08-05 QuantEcon/lecture-python.myst#657, #624 and #644 all merged with their JAX content dropped (style fixes only landed), after #654 was closed with the lecture staying in NumPy. There are currently zero open conversion PRs, while Table C alone lists eight candidate lectures with no PR — the prospective question is the one being asked, and it was the skill's second-billed mode.
The record says the triage layer decides. In every evaluation to date — ge_arrow, markov_asset, wald_friedman, and the 2026-08-06 ge_arrow re-run on #10 — the recommendation was determined by the as-used baseline and what a conversion could reach; the scorecard on top never flipped an outcome. Meanwhile the number-first presentation demonstrably misled: two careful readers in a row took the total for the headline (#14, finding 6).
What changed
references/EVALUATION_FRAMEWORK.md. Both now state the conclusion and point there, and triage's outcome vocabulary is standardized on convert / don't-convert, replacing the review-mode "predicted verdict band".score.pyprintsVERDICT:above the weighted total, labels the total "for the record", and the deciding-flip lines name the verdict they flip to before the recomputed number. The report format's TL;DR opens with the full verdict with the score carried alongside as candidate quality for the record, and the dimension table gains a verdict row so it still carries the decision when quoted on its own. This lands TESTING: benchmark triage run on wald_friedman — six plugin gaps, and a floor that measures the wrong quantity #14's finding 6.What deliberately did not change
The rubric, weights, gates, verdict bands, sensitivity machinery, and scorecard JSON are untouched — CI's regeneration check passes with byte-identical scorecards, and the anchors reproduce 2.85 / no-conversion / fragile and 2.25 / no-conversion / robust-at-floor. Review mode caught markov_asset's masked build defect and remains the mode that answers "should this PR merge?" when one arrives.
Remaining follow-up (not this PR): QuantEcon.manual#104 — distilling what the validation program measured (the 1 s floor, the addressable-share lesson from wald_friedman, the readability break-even) into the manual's JAX page as the rubric's companion, so the canonical criteria absorb the program's empirical findings. Kenko's review is requested in the comments below and on #10.
🤖 Generated with Claude Code