Thanks for saving me the work, and for investigating the issue and coming up with a draft fix.
The Problem
As you noted, what happens is by design, and I concur that it is suboptimal. The behavior you prefer (sending data from additional touches only when they exceed the currently held ones), in addition to being similar to historical synths, is definitely an improvement for expression with any monophonic synth engine.
As you noted, the Linnstrument already does something similar in One Channel mode, in order to generate a pitch bend value from multiple X values. And the issue you noted applies to the Y axis as well as the Z one, whenever one has to reduce data from multiple values to one.
This happens for Channel Aftertouch in One Chan mode, but also with Poly AT or CC whenever the synth is in Mono mode. My use case is when the Linnstrument is in Channel Per Row mode and each MIDI channel is in Mono mode, whether to imitate the playing articulation of individual strings, or wind and brass instruments.
The Solution
Roger had the foresight and wisdom to publish the firmware source code as open source, and Geert did a great job writing and documenting it, so we have the legal right and the technical ability to make a custom version of the firmware, without depending on or however impacting any third party. We Linux users are very fond of FLOSS.
Implementing the change in some external MIDI processor would be a more expensive, potentially more complex, and less efficient workaround. It's apparent to me that the logic in the Linnstrument firmware is not optimal, and that's fairly low hanging fruit.
I'm going to work on this in the coming days. Let's fix this.
