The Arduino IDE injects generated prototypes immediately before the first function definition in the sketch. clearDesired() sat above struct Hub and struct PortThrottle, so prototypes referencing those types were emitted before the types existed. Moved all structs and enums into one block at the top, and documented the constraint in the header so it does not recur.