Seriously, though; there has to be *one* of
DETACH_VVID and
 VOICE_ALLOCATE. From the implementation POV, it seems to me that they
 are essentially equivalent, as both are effectively used when you
 want to say "I'll use this VVID for a new context from now on."
 VOICE_ALLOCATE is obviously closer to the right name for that action. 
Agreed - they are semantically the same.  The question is whether or not it
has a counterpart to say that init-time controls are done.  As for
redundancy - I see it as minimum requirement.  Suppose I want to turn a
voice on with no control changes from the default (no velocity, nothing).  I
need to send SOMETHING to say "connect this VVID to a voice".  The minimum
required is a VOICE_ON or similar.  For something that has no per-voice
controls (e.g. a white-noise machine) you still need to send some event.
And I'd rather see the voice-on protocol be consistent for all instruments.
If that means you have to send two events (VOICE_ALLOC, VOICE_ON) for the
white-noise maker, then I can live with that.
Tim