Optional ReadonlyallocationThe SESSION's allocation, keyed by the fact it bounds — how many sends a channel may carry,
how many members a DCA may hold, how many insert slots exist. A COUNT bound, so unit is
empty and step is 1.
Legitimately absent before a session is loaded, and that absence is a FACT to render (an
unallocated console has no send count to draw), never a default to substitute — the same
cardinality argument as headAmpGain, one level up (#150).
Optional ReadonlycatalogThe processor limit tables, keyed by the fact they bound (gate → GATE_LIMITS,
dynamics → COMP_LIMITS). Supplied by a package that can import @freemixer/catalog, so
the pairing is stated ONCE instead of at every call site.
Optional ReadonlyheadThe PATCHED preamp's own declared travel, read through headAmpGainRangeOf(capability, pad)
so the pad is already folded in. Per instance: absent when nothing is patched, and stale the
moment the channel is re-patched — which is why it is passed in rather than cached here.
The live facts a pointer may need in order to reach real bounds. Every member is optional: a caller supplies what it can, and a pointer whose source is missing resolves to
absentrather than to a substituted default.