Context
Split out of #3127 item 4. The documentation half landed in #3127's PR (docs/MIGRATION-PLAYBOOK.md § "Evals — warrant policy and consumer-verify recipe"); the script-side decision is deliberately left here because scripts/ was outside that PR's fence.
The disagreement
docs/MIGRATION-PLAYBOOK.md:303-310 states evals are warranted, not mandatory, and names two explicit skip classes: a pure-reference skill (playbooks:fable-5, tdd, …) and a skill in a hook plugin.
The gate disagrees, unconditionally:
scripts/check-changed-skills.sh:69-72 adds --require-evals for every skill whose SKILL.md is new or modified.
plugins/skill-quality/scripts/check-skill.sh:690-696 (Check 14) then hard-FAILs on a missing evals/evals.json — for any skill shape. Its own header (:15-17) says so explicitly.
- There is no allowlist file, frontmatter opt-out, plugin-type detection, or hook-plugin awareness in either script. Neither script has any notion of "hook plugin".
- One CI caller:
.github/workflows/ci.yml:1328, which does not pass the flag — the wrapper adds it internally, so it cannot be overridden.
Consequence: a "skip" verdict in the playbook survives only until someone touches that SKILL.md. In #3115, 9 of 13 new eval sets exist for exactly this reason — the gate won by construction, not by argument.
#3127's doc half narrowed the hook-plugin skip (its own parenthetical rationale, "no model-invoked skill", is false for a hook plugin that ships a setup skill) and recorded the gate as operative. The pure-reference skip is still a live contradiction.
Two exits, pick one deliberately
- The gate learns a recorded skip. The repo's established idiom is an exemptions file carrying the verdict —
scripts/skill-count-claim-exemptions.txt is the model. A skip becomes a reviewed, diffable line rather than an implicit absence. Recommended: it preserves the warrant policy's reasoning while keeping CI fail-closed for anything unrecorded.
- The policy drops "skip". Evals become mandatory for every skill;
docs/MIGRATION-PLAYBOOK.md's warrant rule is rewritten as an authoring-quality guide rather than a ship/skip test.
Whichever wins, the losing surface changes in the same PR so the two stop disagreeing.
Related
Context
Split out of #3127 item 4. The documentation half landed in #3127's PR (
docs/MIGRATION-PLAYBOOK.md§ "Evals — warrant policy and consumer-verify recipe"); the script-side decision is deliberately left here becausescripts/was outside that PR's fence.The disagreement
docs/MIGRATION-PLAYBOOK.md:303-310states evals are warranted, not mandatory, and names two explicit skip classes: a pure-reference skill (playbooks:fable-5,tdd, …) and a skill in a hook plugin.The gate disagrees, unconditionally:
scripts/check-changed-skills.sh:69-72adds--require-evalsfor every skill whoseSKILL.mdis new or modified.plugins/skill-quality/scripts/check-skill.sh:690-696(Check 14) then hard-FAILs on a missingevals/evals.json— for any skill shape. Its own header (:15-17) says so explicitly..github/workflows/ci.yml:1328, which does not pass the flag — the wrapper adds it internally, so it cannot be overridden.Consequence: a "skip" verdict in the playbook survives only until someone touches that
SKILL.md. In #3115, 9 of 13 new eval sets exist for exactly this reason — the gate won by construction, not by argument.#3127's doc half narrowed the hook-plugin skip (its own parenthetical rationale, "no model-invoked skill", is false for a hook plugin that ships a
setupskill) and recorded the gate as operative. The pure-reference skip is still a live contradiction.Two exits, pick one deliberately
scripts/skill-count-claim-exemptions.txtis the model. A skip becomes a reviewed, diffable line rather than an implicit absence. Recommended: it preserves the warrant policy's reasoning while keeping CI fail-closed for anything unrecorded.docs/MIGRATION-PLAYBOOK.md's warrant rule is rewritten as an authoring-quality guide rather than a ship/skip test.Whichever wins, the losing surface changes in the same PR so the two stop disagreeing.
Related
--configclaim in three docs, no SSOT for the contract, stale PR-section config #3127 — parent; carries the documentation half.