gateWhen: won't voice-steal if the receiver is a constant (like the 1 in your example).
To convert your Boolean test into a voice-stealing gate, you could use:
((!value gt: 0) fullRamp: 10 ms) sign * (!value gt: 0)
That way, each time your test is true, the expression will become -1 for 5 ms before it jumps up to 1.