You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add approval-gated before/after skill evals with evals-action - #15
Use the pinned native github/evals-action for before/after evals of each changed existing plugin skill, and publish the approved compact comparison comment.
Hold evals, graders, fixtures and neighboring skill sources at the PR merge revision. Switch only the selected skill between exact base-parent and PR-head SHAs; reject measurement-file drift.
Run both arms sequentially using Vally 0.21, one saved model, one worker/trial per case and zero retries. A failing Before verdict does not prevent After.
Show a separate visible case-by-model table for each changed skill, passing/total grader counts, visible After failures, collapsed Before failures, and collapsed marketplace coverage/failure details. Missing/error/skipped evidence never counts as passing.
Inventory local skills and remote skill folders from exact pinned GitHub trees. Unchanged skills are explicitly not evaluated; loading context is not cross-skill regression coverage. No new model matrix or paid all-marketplace policy is introduced.
Keep native structured reports; derive only safe case/model/check verdicts from local native JSONL for the comment. Do not upload raw trajectories, model output, grader evidence, exceptions or transcripts.
Separate approval-gated model permissions from comment-write permissions. Check the current PR head, bot ownership and run/attempt order before updating one comment. Forks are excluded; no pull_request_target or custom Run-button infrastructure.
Approved illustrative sample:#15 (comment) . All sample results, models and comparisons are fictional. The workflow preserves saved model selection; it does not automatically run the sample's two-model/full-cohort example.
Version and changelog
Repository workflow/reporting only. The preserved pending merge integrates already-merged main changes without another plugin version bump.
Checks
41 focused model-free comment/workflow/report checks, skill/eval lint, catalog checks and diff checks pass. The actual pinned catalog inventory resolves 12 skills, six with repo evals. GitHub CI and fresh Copilot review are being requested on the published head. No paid eval or comparison workflow was dispatched; live protected-environment/billing integration is not claimed.
Required setup and risk
A repository owner must configure the existing evals environment with required maintainer reviewers, and the organization must permit Copilot workflow-token billing. Preflight fails closed when protection cannot be confirmed. This PR changes no repository/organization settings, secrets, branch protection, visibility or billing policy.
Maintainers must review workflow/eval/setup/grader code and cost before approving. Trusted same-repository evaluation code receives model-billing credentials. Docker-default configuration and its image/bootstrap/Plugin Run limitations are tracked separately in #17; Vally 0.21 honors that native backend configuration when present. This PR does not claim complete network/credential/host isolation or parity with the locally pinned Copilot binary.
Reporting uses a separate pull-requests: write/actions: read job without model-billing permission. It reads current-run minimal artifacts (seven-day retention subject to repository policy) and links the native run. Plain-language failure reasons describe failed checks, not an AI-generated root-cause diagnosis.
Require protected-environment approval before paid same-repository runs; hold eval measurements fixed while switching only the target skill source and reuse the Action's verified same-job tooling.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Missing working-directory inputs prevent both eval invocations from running, and the selection job lacks the actions: read permission needed for private-repository environment checks.
Introduces approval-gated before/after evaluations for changed existing plugin skills, preserving the marketplace’s shared evaluation setup while switching only the selected skill’s source.
Changes:
Adds sequential, pinned evals-action runs against exact base and PR-head skill versions.
Requires protected-environment approval for same-repository PRs and skips skills without a valid comparison pair.
Adds model-free workflow checks and documents setup, billing, and execution boundaries.
File
Description
README.md
Introduces the approval-gated PR evaluation workflow.
docs/checks-and-evals.md
Documents comparison inputs, approval requirements, and execution limits.
.github/workflows/skill-evals.yml
Adds skill selection, source switching, and sequential evaluation jobs.
.github/workflows/evals.yml
Updates comments to distinguish manual smoke evaluations from skill comparisons.
.github/scripts/validation.test.mjs
Adds checks for workflow policy, selection, source restoration, and measurement drift.
Mock-up only: all results are fictional. Example PR changes marketplace-maintainer/release-plugins and pr-description/pr-description.
Changed skills: 📈 2 resolved · 📉 1 new failure. Other skills: 📉 1 new failure. Failure totals count grader/model results.
Sources: Before <base SHA> → After <PR head SHA> · Evidence:<workflow run link> Trials: One per scenario/model/arm, zero retries. Observed differences do not prove causation.
Read cells as Before → After. A scenario is one test case; graders are its individual checks. Scenario labels below omit their repeated <eval>- prefix; evidence retains the full native IDs.
🌐 All marketplace skills: 6 evaluated · 📉 1 new failure in an unchanged skill · 6 not evaluated
Cells: passing scenarios / total scenarios, Before → After. A scenario passes only when it meets its configured scoring rule; these examples require every grader to pass.
Skill (passing / total scenarios)
Claude Sonnet 5.5
GPT-6.1 Terra
marketplace-maintainer/release-plugins
🔄 4/5 → 4/5 (1 resolved, 1 new failure)
✅ 5/5 → 5/5
marketplace-maintainer/update-remote-pins
✅ 3/3 → 3/3
✅ 3/3 → 3/3
plugin-authoring/add-plugin
✅ 2/2 → 2/2
✅ 2/2 → 2/2
plugin-authoring/submit-plugin
✅ 2/2 → 2/2
✅ 2/2 → 2/2
plugin-authoring/try-plugin-locally
📉 2/2 → 1/2
✅ 2/2 → 2/2
pr-description/pr-description
📈 1/2 → 2/2
✅ 2/2 → 2/2
eval/compare
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
eval/create
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
eval/improve
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
eval/review
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
eval/run
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
eval/setup
⏭️ Not evaluated — no repo eval
⏭️ Not evaluated — no repo eval
The six remote Evals skills have no repository evals. Loading them is not behavioral coverage.
🔎 Marketplace failure details: 2 After · 2 Before (grader/model results)
The command omitted the selected plugin's absolute local path.
<after failed assertion/evidence link>
Legend: ✅ All pass in both arms · 📈 More pass · 📉 Fewer pass · 🔄 Same count, different failures · ❌ Failed grader. Change labels distinguish new, resolved and persistent failures.
⚠️ Error · ⏭️ Not run · ❔ Unknown never count as passing. Use 3/4 → ⚠️ Error, not an invented After count; report partial coverage separately.
Same evals, graders and fixtures across arms; only the PR's changed skill sources differ. Links and SHAs are placeholders, not actual run evidence.
Preserve the pending main integration, fix Action inputs and environment-read permissions, and add the approved compact comparison presentation without expanding paid execution scope.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Avoid upload collisions and importing prior-attempt verdicts when a maintainer reruns the same workflow.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
With workflow-token billing enabled, PR-editable workflows can bypass maintainer approval while retaining paid Copilot access, creating a critical authorization gap.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The publishing job can execute PR-controlled code with pull-request write permissions without protected-job approval, creating a privilege-escalation risk.
Require explicit passing verdicts before declaring resolution
.github/scripts/skill-eval-comment.mjs:215
A missing check in the other arm is treated as a passing verdict: Before with completed=true, routing=false and After with only completed=true produces an improving 1/2 → 1/1 cell and labels routing as resolved. Require an explicit passing verdict for the matching check before declaring a resolution; otherwise mark that comparison unknown or incomplete. Apply the same presence check to the headline totals, transition markers, and marketplace comparison counts.
Run the publisher from a trusted revision
.github/workflows/skill-evals.yml:237
This job executes the PR's comment helper with pull-requests: write, even when a new, unpaired skill causes the protected eval job to be skipped. A same-repository integration with source-file write access but no workflow-editing or pull-request-write permission can replace that helper and gain the job's broader token without approval. Run the publisher from a trusted revision rather than the PR checkout, bootstrapping this new helper on the trusted branch before enabling the workflow.
Replace native JSON parse errors with a fixed diagnostic
.github/scripts/skill-eval-comment.mjs:119
If native stdout contains a non-JSON line after the first JSON record, JSON.parse can include a fragment of that line in its exception message. The CLI logs that message verbatim at line 339, exposing raw evaluator content even when the Action has already classified the evidence as malformed-native-jsonl. Catch the parsing exception here and replace it with a fixed diagnostic.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Use the pinned native
github/evals-actionfor before/after evals of each changed existing plugin skill, and publish the approved compact comparison comment.pull_request_targetor custom Run-button infrastructure.Approved illustrative sample: #15 (comment) . All sample results, models and comparisons are fictional. The workflow preserves saved model selection; it does not automatically run the sample's two-model/full-cohort example.
Version and changelog
Repository workflow/reporting only. The preserved pending merge integrates already-merged main changes without another plugin version bump.
Checks
41 focused model-free comment/workflow/report checks, skill/eval lint, catalog checks and diff checks pass. The actual pinned catalog inventory resolves 12 skills, six with repo evals. GitHub CI and fresh Copilot review are being requested on the published head. No paid eval or comparison workflow was dispatched; live protected-environment/billing integration is not claimed.
Required setup and risk
A repository owner must configure the existing
evalsenvironment with required maintainer reviewers, and the organization must permit Copilot workflow-token billing. Preflight fails closed when protection cannot be confirmed. This PR changes no repository/organization settings, secrets, branch protection, visibility or billing policy.Maintainers must review workflow/eval/setup/grader code and cost before approving. Trusted same-repository evaluation code receives model-billing credentials. Docker-default configuration and its image/bootstrap/Plugin Run limitations are tracked separately in #17; Vally 0.21 honors that native backend configuration when present. This PR does not claim complete network/credential/host isolation or parity with the locally pinned Copilot binary.
Reporting uses a separate
pull-requests: write/actions: readjob without model-billing permission. It reads current-run minimal artifacts (seven-day retention subject to repository policy) and links the native run. Plain-language failure reasons describe failed checks, not an AI-generated root-cause diagnosis.Source contracts
Action pinned to
6e4c077e(v0.2.0): local diagnostics/result outputs, native JSONL evidence, merge revision policy.No bespoke eval runner, grader framework, regression-only gate, dashboard or scheduled updates.