ReadonlycapabilityWhat the patched input DECLARES it physically implements.
Optional ReadonlygainThe travel the /headAmp row already resolved for this preamp AT THE PAD IT HOLDS
(headAmpRowOf → headAmpGainRangeOf). Passed through, never re-resolved: the row owns
that resolution, and a second reader that had to be handed the pad separately is a second
chance to read it against a different instant.
ABSENT where the row resolved none — a channel whose patched input declares no analog SENS has no preamp travel to pass through (import('./source.js').HeadAmpRow.gainRange). The derivation below reads that as the DESK's own stage, which is whose gain it then is.
ReadonlyknownThe /headAmp fields whose value the desk actually holds (never a placeholder).
Optional ReadonlyreasonWhy the declared-but-unwritable fields refuse — a CODE plus args, never prose.
ReadonlywritableThe /headAmp fields a write can reach right now.
What the console can say about ONE channel's head stage at this instant — the per-instance half of the intersection, supplied by whoever holds the
/headAmprow.The three sets are deliberately distinct questions, and conflating any two of them has already cost a rig defect:
capability— can this endpoint carry the control at all? A durable property of the PORT, which is why a box stepping out does not move it (an unplugged box that closedsensmoved GAIN ownership from the preamp to the desk and back, so one encoder gesture landed in two different stores depending on whether a cable was in).writable— would a write reach hardware right now? This is what an absent box closes.known— does the desk hold a real value, or a display placeholder? A projection never invents a default for someone's preamp.