pub const WARNING_STABILITY_FACTOR_ASSUMED_TWIST_RATE: &str = "stability_factor_assumed_twist_rate";Expand description
summary.stability_factor was computed from the default twist because the request left
rifle.twist_rate_m_per_turn out (MBA-1484).
Unlike every other assumed-barrel warning this module emits, this one is not gated on an
opt-in flag, because Sg is not opt-in: effective_sg_from_inputs runs on every solve and
the muzzle gyroscopic stability factor is a direct function of the twist. An omitted field
therefore does not leave Sg alone — it reports the Sg of a 1:12 barrel, under a field name
that says nothing about which barrel it describes.
Measured on a .308 175 gr with NO effects enabled at all: summary.stability_factor is
1.6650154161603787 with the twist omitted, bit-identically 1.6650154161603787 with 1:12
stated, and 3.7462846863608514 with 1:8 stated — 2.25x, across the marginal/comfortable
line a shooter reads Sg to decide. drop_m and windage_m are bit-identical in all three,
so the trajectory really is twist-independent when no spin effect is enabled; the summary
is not, and that distinction is the whole reason this code exists separately from
WARNING_SPIN_EFFECT_ASSUMED_TWIST_RATE.
Emitted at $.rifle.twist_rate_m_per_turn — the omitted field itself — because there is no
flag to hang it on, and only when Sg is actually reported: when
summary.stability_factor is absent nothing misleading was published and there is nothing
to warn about. It fires on any request that omits the twist and gets an Sg, which is most
of them; that breadth is the finding, not a reason to suppress it. The default_applied
assumption at the same path stays, and says a default was applied without saying that a
reported number now depends on it.