A feature matrix where every kind exposes the same feature set — for a mixer whose
capability doesn't vary by kind: the software engine (fader/mute/gain/inserts on every
strip), the hardware-free mock and the surface fake host (all features present). Replaces
their SOFTWARE_FEATURES set and their has: () => … closures. The exhaustive object
literal (typed PerKindFeatureMatrix) fails the build if a ChannelKind is
added without a row here — no cast, no runtime kind walk.
A feature matrix where every kind exposes the same feature set — for a mixer whose capability doesn't vary by kind: the software engine (fader/mute/gain/inserts on every strip), the hardware-free mock and the surface fake host (all features present). Replaces their
SOFTWARE_FEATURESset and theirhas: () => …closures. The exhaustive object literal (typed PerKindFeatureMatrix) fails the build if a ChannelKind is added without a row here — no cast, no runtime kind walk.