Build and push server image / build-and-push (push) Successful in 51s
A single noisy ADC/regulator glitch (see firmware/main/battery.c) survives the existing recharge filter: whichever way it reads, one of the two steps around it (into a dip, or out of a spike) still looks like an ordinary drop and got averaged straight into the remaining- time estimate, letting one bad reading swing it dramatically. Added a MAD-based modified z-score outlier check on top of the existing recency-weighted average. Had to special-case the standard MAD degenerating to exactly 0, which happens whenever more than half the steps share the same value -- the norm for battery data (most wakes cost the same small integer percent), and exactly the shape a single spliced-in glitch among a steady discharge rate has, so the naive case would have let the outlier this is for sail straight through. Falls back to mean absolute deviation there instead. Verified against constructed glitch scenarios in both directions (spurious dip and spurious spike): estimate now comes out identical to the same series with the glitch removed entirely.