Loading…
Loading…
Rule
Gradus GE-290 · cite this code — it is permanent. Rule id unforced-stem-must-use-auto-stem-not-omitted-stem-direction
Where no cross-voice disambiguation is needed, stem direction is pure pitch-vs-middle-line arithmetic with no exceptions — exactly the calculation VexFlow's own `StaveNote.calculateOptimalStemDirection` already performs when explicitly requested via `auto_stem: true`.
Engineering precedent, verified directly against VexFlow source rather than assumed: `StaveNote`'s constructor (stavenote.ts:444-449) is `if (noteStruct.auto_stem) { this.autoStem.
This rule can be decided from pitches, durations and voices — no layout required. A validator can check it before anything is drawn.
Gradus GE-290 — Non-SATB stem direction must be requested via VexFlow's auto_stem flag, not left to an omitted stem_direction default. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/unforced-stem-must-use-auto-stem-not-omitted-stem-direction
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/unforced-stem-must-use-auto-stem-not-omitted-stem-direction