When a morse key whose tap action equals its hold-after-tap action is
tapped and then pressed again within the flow-tap idle window, the
first tap leaves an EarlyFired entry in the held buffer (the early-fire
optimisation). The flow-tap branch then pushed a second entry at the
same position instead of replacing it, so the buffer held two entries
for one key. On release, find_pos_mut returned the stale EarlyFired
entry first, hit its no-op match arm, and never emitted the release
report, leaving the key stuck down.
Remove any existing entry at the position before pushing the new one so
the held buffer keeps its one-entry-per-position invariant.
Adds a regression test covering the tap then flow-tap-repeat sequence.
I noticed that my flow-tap backspace key would occasionally jam and just start deleting text.
Traced it down to this stale entry.