Skip to content

feat(ci): validate, gate and summarize dispatched plugin eval runs #9704

Description

@kyle-sexton

Part of #6405. The smallest first slice from #6405, under the owner's 2026-10-18 decision (option c): workflow_dispatch only, on the role's subscription token, deterministic graders, --max-cost-usd.

.github/workflows/eval-browser-dispatch.yml already runs claude plugin eval on a dispatched hosted runner with bubblewrap and socat, pinned models and --max-cost-usd 5. Extend or generalize it; do not add a second eval workflow.

Scope

  • Run /evals:validate (validate-cases.py) on the target suite before any model call, and fail the job on a load error.
  • An input that restricts the run to deterministic graders.
  • Gate the JSON result through the parser that /evals:plugin-eval reference/ci.md describes, so a partial, skippedPaidGraders, errored or delta-less case reads NOT COMPARABLE instead of a score.
  • Write the with-versus-without table to the job summary, with one health line per case: did the skill load in the with-arm (from the trace), and how many runs fired.
  • Keep ADR 0049 hardening as the workflow has it: trusted-actor dispatch, kill switch, read-only token, no write token in the job.

Done when

  • actionlint .github/workflows/eval-browser-dispatch.yml (or the renamed file) exits 0.
  • A test of the summary parser over fixture JSON results (a scored case, a partial, a skippedPaidGraders, an errored case) passes and prints NOT COMPARABLE for the last three.
  • scripts/check-affected.sh --uncommitted passes.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 24, 2026
  2. github-actions commented on Oct 24, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none

    Understood: extend the existing dispatched eval workflow so it validates the suite before any model call, offers a deterministic-graders-only input, gates JSON results so partial, skippedPaidGraders, errored or delta-less cases read NOT COMPARABLE, and writes a with-versus-without summary with a per-case health line. The ADR 0049 hardening stays as it is. The scope and done-when items are clear. I found no likely duplicates; this is a slice of #6405.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 24, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 24, 2026
  5. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Why, in the run's own words:

    The run reported done, but apply-issue-patch did not commit its patch (patch-protected-path): the patch changes a path the issue lane may not push: a workflow, a CODEOWNERS file, submodule config or a settings file. The run's log names the path or check.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40112622739

    To retry, remove needs-human and add agent-ready again.

  6. 21 remaining items

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: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions