The gain row's stored codec — DESK_GAIN_RANGE, the console's OWN digital gain stage.
A codec is a row's travel in BOTH directions, and this row only ever writes that stage: on a
channel a preamp claims it refuses OWNED_BY_PEER, and the box's span is published by the peer
that owns it. So the travel here must be the desk's declaration, and it is the SAME one
/channel/{kind}/{index}/capability answers as gainRange for a preamp-less channel
(channel-capability.ts) — one declaration, so the guard and the knob agree by construction.
Spelled with HEAD_AMP_GAIN_MIN_DB/MAX_DB they agreed only by coincidence of numbers, and
the desk's digital gain carried a REAC preamp's 0 dB floor: a −6 dB PATCH answered db: 0 with
applied: true and moved MAIN 0.00 dB (#708, measured in job-gain-audio.test.ts).
The gain row's stored codec —
DESK_GAIN_RANGE, the console's OWN digital gain stage.A codec is a row's travel in BOTH directions, and this row only ever writes that stage: on a channel a preamp claims it refuses
OWNED_BY_PEER, and the box's span is published by the peer that owns it. So the travel here must be the desk's declaration, and it is the SAME one/channel/{kind}/{index}/capabilityanswers asgainRangefor a preamp-less channel (channel-capability.ts) — one declaration, so the guard and the knob agree by construction. Spelled withHEAD_AMP_GAIN_MIN_DB/MAX_DBthey agreed only by coincidence of numbers, and the desk's digital gain carried a REAC preamp's 0 dB floor: a −6 dB PATCH answereddb: 0withapplied: trueand moved MAIN 0.00 dB (#708, measured injob-gain-audio.test.ts).