Skip to content

fix(evals): flag regex graders that differ under JavaScript in /evals:validate #8385

Closed

Description

@kyle-sexton

Problem

/evals:validate grades a case's regex graders against its samples with Python's re (plugins/evals/skills/validate/scripts/validate-cases.py), but claude plugin eval runs the same patterns with a JavaScript engine. Tokens that Python supports and JavaScript does not pass validation and then behave differently in the paid run.

Observed 2026-10-18 on the #8331 branch: a grader pattern starting with \A sorted every sample correctly under the validator, yet in the paid run JavaScript read \A as a literal A (and throws "Invalid escape" under the u flag), so the grader failed every with-plugin run. It cost a paid run and a diagnosis round.

Outcome wanted

The validator flags any regex grader pattern that does not compile, or compiles differently, under JavaScript semantics, before any money is spent.

Done when

  • validate-cases.py reports FAIL for a regex grader using \A, \Z, \z, possessive quantifiers, atomic groups, or other Python-only syntax, naming the grader and the token.
  • Where node is available, the validator also runs each regex grader's samples through JavaScript's RegExp and fails when the JavaScript result differs from the expected sort.
  • A test case for each token.

Related

Activity

  1. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 19, 2026
  2. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 19, 2026
  3. github-actions commented on Oct 19, 2026

    @github-actions
    Contributor

    Understood: /evals:validate checks regex graders with Python's re, but claude plugin eval uses a JavaScript engine, so Python-only tokens (\A, \Z, \z, possessive quantifiers, atomic groups) pass validation and then fail in the paid run. You want validate-cases.py to flag those tokens by grader and token name, and, where node is available, to run each grader's samples through JavaScript RegExp and compare them to the expected sort, with a test per token. The scope and done-when list are clear. No duplicates found in my search.

    Automated triage. A maintainer reviews it.

  4. 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 19, 2026
  5. melodic-automation-lanes commented on Oct 19, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue run that agent-ready started failed before it reported, or the token broker refused it because its workflow files differ from main's. work-unblock removed and added agent-ready back to start a fresh run on main's workflow files. It does this once per version of those files, so if this run fails the same way, a person looks at it.

  6. added
    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 19, 2026
  7. melodic-automation-lanes commented on Oct 19, 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 left a required check undone, so it is not finished.

    What the run says it did not do:

    • check-affected failed twice with 'error: .bash_profile: can only add regular files' (git add hitting dotfiles in the runner's work directory); could not be fixed from the working tree
    • The offline Python check still prints 'samples not checked' for a pattern re cannot compile even when the JavaScript pass graded it

    Partial work is on the branch work-resolve-issue/issue-8385-39307036662-1. A retry continues from it; delete the branch first to start again from the default branch.

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

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

  8. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 22, 2026
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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions