Chapter 11 · Committing Changes
Subchapter 11.4
evals/README.mdMarkdown4 KBView on GitHub
Two eval sets. Run the one that matches what changed.
| Changed | Run |
|---|---|
| or frontmatter |
descriptiontrigger eval (trigger-eval.json) |
| skill body | behavior eval (behavior-eval.json) |
Does the skill activate on the right phrasings and stay silent on near-misses? trigger-eval.json holds 13 queries; run_real_eval.py runs them (see ../../creating-pull-request/evals/run_real_eval.py for why this runner exists instead of the skill-creator harness); baseline.json is the last known-good run. Requires Python 3.10+ and an authenticated claude CLI.
python3 run_real_eval.py --eval-set trigger-eval.json --runs-per-query 3 \
--num-workers 8 --timeout 60 --model claude-opus-4-7 > result.json
diff <(jq -S . baseline.json) <(jq -S . result.json)Empty diff means no regression. Fix the description rather than the eval set; if a change is intentional, replace baseline.json in the same PR.
Known flaky query: create a new branch for the PM-33210 work before I start coding, nothing to commit yet sits near the decision boundary and baseline.json records it at 1-of-3. A clean re-run can diff non-empty with no regression — judge that query by whether it stayed under the 0.5 threshold, not by byte equality.
Does an active skill change the output? Cases live in behavior-eval.json (skill-creator schema, matching ../../architecting-solutions/evals/); pass rates in behavior-baseline.json, keyed by model and effort. Run with /skill-creator:skill-creator in Benchmark mode with a config-blind grader. Every expectation is graded independently, so denominators are expectations × runs.
Cases are advice-only — git state is quoted in the prompt and the graded artifact is the stated plan, so re-runs mutate nothing. The cost is that they grade what the skill says it would do. Where a case must prove a gate actually stops a mutation, use a live disposable fixture and hand-run it.
no-skill — is the skill load-bearing at all? The right control when adding a skill.old-skill — did this edit regress anything? Required whenever the skill body changes. Snapshot the previous version (git show <ref>:.../SKILL.md). no-skill cannot answer this: old and new both beat it, so it can’t detect an edit that made things worse.new-skill — the working tree.Refresh behavior-baseline.json in the same PR as the skill change.
Caveats on the current numbers:
no-skill. default-is-main-no-hint scores 12/16 with no skill at all, where a live fixture had the pre-change skill committing straight to main.default-is-main-no-hint and default-unresolvable separate the arms. The other four sit at ceiling in all three, so treat them as regression guards rather than evidence.main or master cannot isolate the resolution instruction, because a model declines to commit onto either name unprompted. default-is-master shows the gate fires on a non-main default; it is not proof that resolution beats name matching.Skill(bitwarden-delivery-tools:committing-changes) gets the last published version, not your edit. Copy SKILL.md to a scratch path and have the subagent read it.