A DECLARED TRAVEL as the ParamSpec a control renders — the one direction between the
two shapes.
The travel ({min, max, step, unit}, a ControlLimit) is owned by the thing behind the
control: an EQ band's gain extent is EQ_GAIN_RANGE because clampEqGain enforces it, a
gate's fields are GATE_LIMITS because the controller clamps by it. A ParamSpec is that
travel plus two presentation facts the owner has no opinion about — the taper (how the throw
maps) and the format (how the number reads).
A spec typed independently of the travel it must equal is invisible to tests, because both
sides are literals and neither points at the other; a spec derived from it cannot drift at all.
The gap that opens is a control drawn wider than the thing behind it — the surface offers a
reach the store silently takes back.
A log taper over a non-positive minimum is REFUSED here rather than quietly nudged: the
declaration and the mapping chosen for it genuinely conflict (makeParam would throw), and
raising the floor to hide it would give back a control that cannot reach a value the store
accepts — the same lie in the other direction.
A DECLARED TRAVEL as the ParamSpec a control renders — the one direction between the two shapes.
The travel (
{min, max, step, unit}, aControlLimit) is owned by the thing behind the control: an EQ band's gain extent isEQ_GAIN_RANGEbecauseclampEqGainenforces it, a gate's fields areGATE_LIMITSbecause the controller clamps by it. AParamSpecis that travel plus two presentation facts the owner has no opinion about — the taper (how the throw maps) and the format (how the number reads).A spec typed independently of the travel it must equal is invisible to tests, because both sides are literals and neither points at the other; a spec derived from it cannot drift at all. The gap that opens is a control drawn wider than the thing behind it — the surface offers a reach the store silently takes back.
A
logtaper over a non-positive minimum is REFUSED here rather than quietly nudged: the declaration and the mapping chosen for it genuinely conflict (makeParamwould throw), and raising the floor to hide it would give back a control that cannot reach a value the store accepts — the same lie in the other direction.