Skip to content

TESTING: review + expert-parallel protocol for the benchmark skill (@xuanguang-li) #10

Description

@mmcky

Testing and review protocol for @xuanguang-li — everything we'd like your eyes on, in order, with the machinery validation already done so your time goes to judgement, not reproduction.

Body updated 2026-08-03. PR #5 merged on 2026-07-27 and its branch was deleted, so the five links here 404'd; they now point at main. §3 has been replaced with the current install route, §1's last bullet corrected (#5 adopted the unconditional x64 cap), and §4 carries a status note about the PR it was written against. The comment below records the changes.

Context. Your evaluation system is packaged as the benchmark plugin, on main since #5 (shipped as v0.3.0 on 2026-07-27; current release 0.3.1): the deterministic engine (benchmark/scripts/scoring/), the framework (EVALUATION_FRAMEWORK.md), your ge_arrow (lecture-python.myst#717 → 2.85) and markov_asset (lecture-python.myst#654 → 2.25) evaluations as regression anchors, and a rubric-v2 revision from the 2026-07-21 adversarial design review (your measurement foundation was endorsed by both review tracks and is unchanged). We have already re-validated end-to-end from a fresh checkout of lecture-python.myst#717 on jax 0.10.1: exact reproduction of 2.85 / no-conversion / fragile with the same deciding flips — see reviews/validation-run-ge_arrow-2026-07-22.md. You do not need to repeat that exercise.

1. Review the rubric v2 changes (merged in #5 — read them on main)

The v2 changes touch only the verdict layer of your rubric — dimension scoring is untouched. Please push back on anything; rubric semantics stay yours.

  • Verdict gates — correctness 1 caps the verdict at net regression, correctness 2 at mixed/wash, enforced in score_all (rubric.py); the logic&design bug-cap is now derived from the correctness evidence (builds / x64 divergence) rather than a hand-set boolean
  • No-conversion verdict — fires when the baseline as-used total is under a 1 s materiality floor and the candidate is slower as-used; reconciles review mode with your triage bound (the polished-ge_arrow case). The 1 s floor is a labeled policy choice — is it the right one? A run since has produced a case that clears it while having nothing to sell; see TESTING: benchmark triage run on wald_friedman — six plugin gaps, and a floor that measures the wrong quantity #14, finding 4
  • Sensitivity stampscore.py perturbs every scored input one at a time (booleans flipped, counts ±1, floats ±10%) and stamps the scorecard robust/fragile with deciding flips listed
  • K-repeat as-used — median of 3 fresh-process runs per side, with a contested-band annotation when runs span a band edge
  • The flagged Copilot thread, resolved in Land the lecture evaluation system (benchmark plugin 0.3.0: rubric v2, skill wired) #5 and needing your confirmation: x64 divergence originally forced correctness 1 only when shipped drift also exceeded 1e-8 (your original semantics). Copilot argued for making it unconditional and Land the lecture evaluation system (benchmark plugin 0.3.0: rubric v2, skill wired) #5 adopted that, so matches_under_x64 now caps correctness on its own in score_correctness, with the reasoning in that function's docstring. benchmark/CHANGELOG.md 0.3.0 records the effect: the "wrong economics masked by low precision" case moves from correctness 5 / total 3.25 to correctness 1 / total 2.30, gated to net regression. Confirm or amend

2. Three design calls (comment on #7)

  • Readability instrument v2 — docstring coverage inverts your own exemplars (odu.py, your LOW example, measures 0.86; flagship-aiyagari style ~0.41–0.55, capped at 2). Proposal: equation-traceability — per numbered equation, cite the single implementing expression; fraction traceable old vs new, same citation discipline as your checklists
  • Extraction/replay verification — a mechanical diff of extracted code and replayed call sequence against the lecture's cells (our validation run caught an undisclosed whitespace normalisation this way); longer-term, whether executing the lecture itself at both refs should become the as-used source
  • Confirm or amend the x64 guard decision from item 1 as a rubric-level statement

3. Optional — see the skill in action

Not required (the validation already covers the machinery), but if you want to feel out what reviewers will receive: from a lecture-python.myst checkout, in a Claude Code session, with no clone of this repo and no branch checkout —

/plugin marketplace add QuantEcon/skills
/plugin install benchmark@quantecon

Restart the session (plugins register at startup), then:

/benchmark:review-acceleration 717

/plugin is a terminal-CLI built-in; in the VS Code extension or the web app use the equivalent claude plugin … commands (using-skills § Setup).

Evaluation artifacts land in benchmark-eval/<lecture>/ in your workspace; lecture-python.myst#717 should land on exactly 2.85 / no-conversion / fragile (your numbers are the answer key). Any conversion PR works. The by-hand walkthrough of the same steps is docs/tutorial-run-an-evaluation.md. What we most want from this: critique the report — is it something you would sign?

4. The acceptance test — expert-parallel on a conversion PR

Status note (2026-08-03): this section was written against lecture-python.myst#654, which @jstac had already closed unmerged on 2026-07-21 — a couple of hours before this issue was opened — concluding that the lecture stays in NumPy, the same conclusion the skill's markov_asset evaluation reached (2.25/5, headline verdict no-conversion). Step 4 below therefore has no live PR to land on. Whether the acceptance test becomes a retrospective adjudication of lecture-python.myst#654 or retargets to an open conversion PR is being decided in the comments. Two open PRs qualify as independent targets — lecture-python.myst#657 (multi_hyper) and lecture-python.myst#624 (mccall_q). lecture-python.myst#644 (kalman_2) is open and unevaluated but is @xuanguang-li's own, so it cannot serve as the independent half of an expert-parallel test; lecture-python.myst#717 is out for the opposite reason — its 2.85 is published as the answer key and committed as a regression anchor.

The part only you can do (tracked on #4; the #8 work plan that originally carried it was closed on 2026-07-27). Protocol:

  1. The skill runs a complete v2 evaluation of the PR under test from scratch (fresh extraction, measurement, evidence, score, report) — we drive this and post the report here, not on the PR
  2. You evaluate the same PR independently (or, if you prefer, adjudicate the skill's report line by line — your choice; independent-first is the stronger test)
  3. We reconcile: every discrepancy resolved by evidence, with the rubric amended where your judgement and the instrument disagree
  4. The reconciled report becomes the single authoritative comment on the PR under test

Comment here, on #7, or on #14 — whatever is easiest. Relates to #4 (skill wiring and the named validation runs), #7 (rubric v2), #14 (triage-run findings).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions