Minimum least-squares slope, in dB PER FRAME, over GROWTH_WINDOW_FRAMES for a
bin to count as "running away" rather than merely holding level. Set with real margin on
BOTH sides — comfortably above measurement jitter on a held tone or a quiet/broadband
mix (well under 0.2 dB/frame in practice) and comfortably below a genuine feedback ramp,
which climbs several dB across a handful of ~20 ms hops as it heads toward clipping.
Issue #91's acceptance bar is "arming must never burst-alarm on non-growing content", so
this errs conservative (under-fire a marginal ramp) rather than tight (risk a false
alarm) — isGrowing also requires the window's end to sit above its start, a
cheap belt-and-braces check against a fit dragged positive by one mid-window wobble.
Minimum least-squares slope, in dB PER FRAME, over GROWTH_WINDOW_FRAMES for a bin to count as "running away" rather than merely holding level. Set with real margin on BOTH sides — comfortably above measurement jitter on a held tone or a quiet/broadband mix (well under 0.2 dB/frame in practice) and comfortably below a genuine feedback ramp, which climbs several dB across a handful of ~20 ms hops as it heads toward clipping. Issue #91's acceptance bar is "arming must never burst-alarm on non-growing content", so this errs conservative (under-fire a marginal ramp) rather than tight (risk a false alarm) — isGrowing also requires the window's end to sit above its start, a cheap belt-and-braces check against a fit dragged positive by one mid-window wobble.