5 Commits
Author SHA1 Message Date
ayobamiseun f1f6fbf398 fix(code-simplification): say the skill applies when the code is pasted inline (#620)
One clause on the description: the skill applies when asked to
simplify, clean up or reduce the nesting of a function that already
works, even when the code is pasted inline. Two Tier 2 positives for
the clause, a fires and stays-quiet pair under evals/plugin/, and a
paragraph in evals/README.md with the measurements.

claude-opus-5-5 pinned, Claude Code 2.1.296, three runs per prompt per
description: the three simplification phrasings went from 0 of 9 to
8 of 9, five adjacent must-not-fire prompts stayed at 0 of 15 both
ways. On the graded pair the judge passed 3 of 3 with the plugin and
0 of 3 without.
2026-10-16 10:46:02 +01:00
Zlobin-KandClaude Sonnet 5 6ff91e06e8 fix(evals): add missing owner to negative trigger tests
Six negative-trigger prompts across six case files declared no `owner`,
so per evals/README.md and scripts/run-evals.js they could only pass
vacuously (skip the pairwise routing assertion) instead of asserting
that the correct skill actually outranks the tested one.

Added owner for the prompts where a real, unambiguous owner exists and
verified against scripts/run-evals.js that it outranks the tested skill
with a non-zero score:

- code-simplification: "Add a feature flag system to the app" -> incremental-implementation
- deprecation-and-migration: "Add dark mode to the settings page" -> frontend-ui-engineering
- doubt-driven-development: "Write the changelog entry for the release" -> git-workflow-and-versioning
- frontend-ui-engineering: "Tag and publish the release" -> git-workflow-and-versioning
- planning-and-task-breakdown: "Encode the output so it is safe against XSS" -> security-and-hardening
- using-agent-skills: "Make the modal accessible for keyboard users" -> frontend-ui-engineering

Left four other owner-less negatives untouched (doubt-driven-development's
"Format this file with prettier", git-workflow-and-versioning's "Add a
loading spinner to the submit button", observability-and-instrumentation's
"Draft the PRD for the referral program", and shipping-and-launch's "Why
is this function so slow on large inputs?") because no skill scores above
zero against them under the current TF-IDF scorer, so declaring an owner
there would either fail CI or force a misleading pick.

Verified: node scripts/run-evals.js still passes (127 checks, 0 errors,
86% rank-1) and node scripts/validate-commands.js passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 23:31:17 +03:00
Zhiyao 5168535ce4 feat: promote skill eval gates to trusted 2026-07-10 15:29:28 +08:00
Addy Osmani 194b2099c6 feat(evals): harden Tier 3 and make negatives pairwise routing tests
Per review from @federicobartoli and @nucliweb on #342:

Tier 3 (behavioral):
- Grade the execution trace, not the final output: executor runs with
  --output-format stream-json --verbose so the grader judges tool calls
  and file edits rather than the model's self-reporting.
- Run each eval in a throwaway workspace; files[] fixtures materialize
  from evals/fixtures/ so evals can operate on real code.
- Node-level timeouts on executor and grader calls; grader output parsed
  and shape-validated before writing (raw saved on failure); the trace is
  fenced as untrusted data in the grader prompt.
- All 24 behavioral evals flagged trust_level: "provisional" until they
  gain fixtures; the runner surfaces this and exits nonzero on failed
  expectations.

Tier 2 (deterministic):
- Negative triggers accept an "owner" skill that must outrank this one,
  turning them into pairwise routing tests that cannot pass vacuously;
  37 of 48 negatives now declare owners (the rest are tracked in #351).
- Warn when a case file is below the documented minimums (3 positive /
  2 negative / 1 behavioral); promotion to error tracked in #352.
- Stemmer: cluster trailing y/i ("simplify"/"simplifies").

Baseline holds: 120 checks, 0 errors, 85% trigger rank-1 rate.
2026-07-06 11:36:29 -07:00
Addy Osmani 45e1449138 feat(evals): add a three-tier skill eval framework
There was no way to measure whether skills trigger correctly, stay
distinct, or change agent behavior. This adds evals, aligned with what
the community has converged on, with a deterministic CI tier on top:

- evals/cases/<skill>.json for all 24 skills. The evals[] block uses
  Anthropic skill-creator's evals.json schema verbatim (id, prompt,
  expected_output, expectations[]) so its runner, benchmarks, and eval
  viewer work against our files unmodified. A trigger block (this
  repo's extension) adds positive/negative routing prompts per skill.
- scripts/run-evals.js, zero-dependency runner:
  Tier 2 (CI): trigger evals via stemmed TF-IDF ranking over skill
  descriptions (positive prompts must rank top-k, negative prompts
  must not rank first), catalog collision detection between skill
  descriptions, schema and coverage checks.
  Tier 3 (opt-in): --behavioral <skill> executes each eval through
  headless claude -p and grades the transcript against expectations[]
  (superpowers-style); --dry-run previews without spending tokens.
- CI: run the deterministic tier in the validate-skills job.
- Docs: evals/README.md defines the framework and prior art;
  CONTRIBUTING requires an eval file for new skills (warning-level in
  the runner until in-flight skill PRs clear); CLAUDE.md pointers.

Current baseline: 120 checks pass, 85% trigger rank-1 rate across 72
positive prompts, zero catalog collisions.
2026-07-03 23:46:30 -07:00