87bcd3df6b
Problem 1: Dead zone (skip learn when error < 1.5°) means stale exemplars linger in ring buffer after target moves. Fix: detect error jump >5° and reset ring buffer (aimer.count, aimer.nextSlot = 0) for fresh start. Problem 2: Fire gate only checked start condition (err < threshold), never stopped firing when error worsened. Fix: explicit setFire(0.0) when error exceeds tolerance, making gate bidirectional (start and stop). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>