This was surprisingly tricky, but fixed! The issue was that short tap strokes were being fed through the stroke-rendering library (perfect-freehand), which applies start/end taper over a configurable length. When the total stroke distance is shorter than the combined taper length, the stroke tapers to nothing — so dots just disappeared. The fix detects tap-like strokes and renders them directly as small ellipses, bypassing the stroke pipeline.
This was surprisingly tricky, but fixed! The issue was that short tap strokes were being fed through the stroke-rendering library (perfect-freehand), which applies start/end taper over a configurable length. When the total stroke distance is shorter than the combined taper length, the stroke tapers to nothing — so dots just disappeared. The fix detects tap-like strokes and renders them directly as small ellipses, bypassing the stroke pipeline.