b4e8f12539
checkPianoRecipe stacks each hand low-to-high (nearest strictly above, repeated pc -> octave up) and fails any hand spanning > 15 semitones (minor 10th, SCHEMA rule 3); errors name style/prog/play/chord/hand/ span; refactored to a pure exported checker surfacing all errors per recipe. Smoke +6 checks -> 799. Independent gate PASS (injection surfaces 10 named errors exit 1; weakened gate caught behaviorally). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>