pub fn tolerance_envelope(
base: &ResolvedSolveRequestV1,
axes: &[InputAxis],
range_m: f64,
target: TargetGeometryV1,
domains: &[(InputAxis, (f64, f64))],
) -> Result<ToleranceReportV1, KernelError>Expand description
How far may each of axes drift from its own current value, one at a time, before the impact
leaves target – see the module doc for the full contract, and especially “The central
hazard” for what unbounded_in_domain/nominal_inside_target mean together.
domains supplies, for each axis in axes, the (lower, upper) bound to search within; see
“Domains are validated up front, per axis” in the module doc.
§Errors
KernelError::Observationimmediately, before any solve, ifrange_mis not finite or falls outside[0, base.shot.max_range_m]– the same checkcrate::error_budget::error_budgetapplies to its ownranges_m.KernelError::InvalidDomainimmediately, before any solve for that axis, ifdomainshas no entry for one ofaxes, either bound is not finite, the lower bound is not strictly less than the upper, or the axis’s own current value does not sit strictly between them.- Otherwise, propagates any
KernelErrorthat is not one of the four structural refusals recorded inToleranceReportV1::unavailable_axesinstead – see “Unavailable axes” in the module doc.