Processor-to-controller note completion¶
EventData::NoteEnd { target } reports completion on the originating note input
endpoint, independently of key release and choke. Optional channel/key/ID scope
uses the usual checked portable ranges. Its carrier offset follows normal event
buffer bounds/order but conveys delivery order rather than an exact voice
termination time. Performance graph filters and complete worker queues retain it;
receiver code owns identity reuse and lifetime tracking.
Exported MainBusBridge/MultiBusBridge::with_note_end_output_port(Some(index))
select an input endpoint below 256 independently of note output, MIDI/UMP and
scoped parameter routes. Missing routes/native-too-wide IDs reject whole generated
delivery before any host prefix while rendered audio/DSP remain progressed.
Native note-end ignores timestamp/velocity, and the adapter retains the bounded
carrier offset in its event header. Parameter flush rejects generated completions.
Incoming native end notifications are filtered as unsupported processor input;
general input count/order/offset validation still includes ignored events.
Hosted completion output uses a separate input-endpoint profile and canonical carrier ordering; see plug-in hosting. No exported voice allocator or public reference instrument behavior is inferred. Tests cover portable/graph/queue preservation, native f32/f64/main/multibus output, whole preflight, prefix refusal, flush and prepared heap policy. See decision 0140.