014e9afa51
Keltner::update gated atr.update behind ema.update(...)? and Hma::update gated full_wma.update behind half_wma.update(...)?. The ? short-circuit starved the trailing sibling of every candle consumed during the leading one's warmup, so warmup_period() understated the true first emission (Keltner classic: 29 instead of 20; HMA(9): 14 instead of 11) and Keltner's ATR seeded over the wrong window. Both now feed every sub-indicator unconditionally and gate only the output, matching the MACD / Awesome Oscillator pattern. warmup_period() is now exact. Adds first-emission tests and cross-checks against independent EMA+ATR (Keltner) and independent WMAs (HMA).