Immutable complete parameter programs¶
ProgramBank<N> borrows ParameterProgram<N> entries and the same validated
ParameterSchema<N> used for parameter state. Preparation validates all entries
strictly before registration: 1..128 programs, 1..1024 parameters, <=65536 values
total; complete canonical physical states, nonblank names <=255 UTF-8 bytes with
no NUL, unique stable ProgramId and unique zero-based MIDI bank/number address
(0..16383/0..127). Names may repeat; permanent IDs remain separate from indices
and MIDI addresses. Signed zero normalizes when obtaining a ParameterState.
index and midi_index perform bounded exact lookups; state(index) proposes
a complete copied state. Invalid/unavailable lookup yields None, preserving all
consumer state. Editing a returned state never changes the bank. Construction,
lookup and copying use no heap, locks or I/O. The bank has no mutable current
program or sound engine. Consumers decide atomic publication, identity after
edits, voice/history handling, host registration/notifications and persistence.
See decision 0080 and the separate
MIDI request decoder.