Skip to content

Evals: cheaper cadence, one case per invocation, free structural checks #13

Closed

Description

@sabind

Learnings from adding three task-executor cases for #2 on 2026-10-13, where each run is about twenty cents and the agent run, not the judge, is the cost.

Cadence in the README. evals/README.md says three runs is the confirmation. Record the cheaper rule: run only the component the change touched, never the suite; iterate at --runs 1; confirm at two runs for a case whose graders are all deterministic on a deterministic prompt, three otherwise.

One case per invocation. claude plugin eval honours only the last --case flag, so EVAL_ARGS="--case a --case b" runs b alone. Say so in the README, or make the Makefile accept a list.

Free checks on case structure. What needs no model goes under checks/: every case carries its component's tag, every grader's frontmatter parses, every scaffold.sh is a regular executable file, no --case typo. Overlaps with #3.

Fewer variants. A twin case that differs only in mode (stops-on-vague-bundle-standalone) doubles a hypothesis's cost for one extra fact. Drop or demote such twins once they have stayed green across a few agent changes.

Activity

  1. added
    triageNot yet classified by a maintainer
    on Oct 13, 2026
  2. added theissue type on Oct 13, 2026
  3. sabind commented on Oct 13, 2026

    @sabind
    ContributorAuthor

    Evidence from 2026-10-13, so this ticket stands on its own.

    Cost per run (list price, claude plugin eval on the task-executor cases added in #14, agent model opus):

    Case Per run Graders
    stops-on-vague-bundle $0.17 5 deterministic + 1 llm
    stops-on-vague-bundle-standalone $0.17 5 deterministic + 1 llm
    done-with-assumptions $0.20 5 deterministic + 1 llm

    Adding the llm grader moved a run by about $0.03. The agent run itself is the cost, so the levers are how many runs and which cases, not how a case is graded.

    Only the last --case is honoured. This command ran only stops-on-vague-bundle-standalone:

    make eval-agent-task-executor EVAL_ARGS="--runs 1 --case stops-on-vague-bundle --case stops-on-vague-bundle-standalone"
    

    The first case was silently skipped, and the table listed one case. One invocation per case is the workaround until the Makefile or the README covers it.

    Cadence agreed with the maintainer: run only the make eval-<kind>-<name> target for the component the change touched, never make eval; iterate with --runs 1; confirm at two runs when every grader of the case is deterministic (regex, tool_used, file_exists) and the prompt leaves the agent one sensible path; confirm at three runs otherwise, including any case with an llm grader. The README currently says three for everything.

    Free checks: the structural checks bullet overlaps with #3, which already covers eval tag hygiene. Do that part under #3 and leave this ticket the README, the --case behaviour and the twin-case guidance.

  4. added
    qualityThe behaviour of the skills, agents and rules, and the evals and checks that guard it
    and removed
    triageNot yet classified by a maintainer
    on Oct 13, 2026
  5. sabind commented on Oct 13, 2026

    @sabind
    ContributorAuthor

    Status (2026-10-13): three of the four items ship with the 3-eval-checks-and-cadence branch, which closes this issue.

    • Cadence in the README: evals/README.md now says to run only the component touched, iterate at --runs 1, and confirm at two runs when every grader of the case is regex, tool_used or file_exists, three when any is llm or the target mixes both. The Makefile header and the top-level README agree.
    • One case per invocation: documented as --case takes one glob and the last flag wins, so several named cases need one invocation each. Making the Makefile accept a list was judged more complexity than the cost warrants for now; revisit if evals get expensive.
    • Free checks on case structure: checks/test_eval_cases.py, under make validate: every case tagged with its component, every grader parsing with a known type and its required fields, every scaffold a regular executable file named by its case.yaml.
    • Fewer variants: dropped by decision on 2026-10-13. The twin stops-on-vague-bundle-standalone stays; no rule about twins goes into the README.
  6. sabind commented on Oct 14, 2026

    @sabind
    ContributorAuthor

    Closed by PR #22 (merged 2026-10-14). The PR body said "Closes #3, #13 and #4" but GitHub only auto-closes the first reference after a keyword, so closing by hand.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumDo soonqualityThe behaviour of the skills, agents and rules, and the evals and checks that guard it

    Type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions