Loading…
Loading…
Rule
Gradus GE-091 · cite this code — it is permanent. Rule id transposition-field-validity-range
Real orchestral transposition intervals span a known, bounded set — from roughly a minor third down (Eb alto sax family, transposition +9 by the code's convention, or written a minor third+octave arrangements for some Eb instruments) to about a major sixth or minor seventh in either direction for the most extreme common transposing instruments (e.g. contrabassoon sometimes notated with an octave transposition, bass clarinet at -10 to -14 depending on octave convention). A `transposition` value far outside this range (e.g. +40, or a non-integer) is never a real instrument and is almost certainly an authoring mistake — a typo, a confusion between semitones and some other unit, or a garbled agent-generated value.
A public-API request with `transposition: 127` (plausibly a MIDI-velocity-range value pasted into the wrong field by an agent) silently accepted and applied, producing a part written over ten octaves away from concert pitch with no warning at all — confirmed as currently possible by reading `jsonToScore.ts:665`'s unconditional `transposition: ins.transposition ?? 0`, which performs no range or type validation whatsoever on the supplied value before use.
No single named authority states a numeric bound (this is Gradus's own engineering guardrail, not an engraving convention per se), but the bound itself is derived directly from the real transposing-instrument intervals documented in Adler, The Study of Orchestration, and reflected in the tessitura-table instrument list below.
This rule can be decided from pitches, durations and voices — no layout required. A validator can check it before anything is drawn.
Gradus GE-091 — The `transposition` field has no validity range check today and should be bounded to real instrument values. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/transposition-field-validity-range
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/transposition-field-validity-range