pendingKeyDown was a Set keyed by action.id, so it only blocked a button from re-firing itself. Pressing two different buttons in fast succession (e.g. RB01 then RA01) both passed the guard, both read memRunningActionId before either had persisted it, and both started a Notion timer entry. Replaced with a single keyDownBusy flag shared across all buttons of the action, set synchronously before the first await, closing the race.
64 B
64 B