Loading…
Loading…
Rule
Gradus GE-183 · cite this code — it is permanent. Rule id beam-renderer-contract
A renderer-invariant guard, not a per-lesson authoring rule: the call site that generates beams must always pass the meter's beat groups (or beaming falls back to 4/4 in every time signature) and must preserve a forced stem direction (or a shared-stave voice's up/down role assignment is silently overwritten).
31 blocks across 15 files were found beaming 6/8 content in twos (4/4 fallback) before `groups` was added to the call; without `maintain_stem_directions`, a fugue exposition's per-voice stem roles get recomputed from pitch and the shared-stave convention silently breaks on every beamed group.
VexFlow API contract (Beam.generateBeams options: `groups`, `maintain_stem_directions`) combined with Gould's fixed-stem-role convention (voice-numbering-role-fixation), which the second flag is what actually implements.
This rule can be decided from pitches, durations and voices — no layout required. A validator can check it before anything is drawn.
Gradus GE-183 — Beam.generateBeams must always receive `groups` (meter-correct beat grouping) and, for any voice with a forced stem, `maintain_stem_directions`. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/beam-renderer-contract
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/beam-renderer-contract