WARNING_STABILITY_FACTOR_ASSUMED_TWIST_RATE

Constant WARNING_STABILITY_FACTOR_ASSUMED_TWIST_RATE 

Source
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.