Ticket 065 — Geofence and Landing-Zone Awareness in Stochastic Propagation¶
Status: Planned¶
Problem¶
run_stochastic_propagation passes geofences and landing_zones
to each particle's estimator call (they are propagated through
_EstimatorInputs), but the particle energy curve is derived from
the nominal route, not from a geofence-aware route. A particle whose
sampled parameters (e.g., wind) make the route geofence-infeasible is
silently dropped rather than counted as a feasibility failure.
Additionally, feasibility_rate currently only counts energy reserve
violations. A particle that cannot reach any landing zone at reserve
(due to wind pushing it off-route) is not reflected in feasibility_rate.
Acceptance Criteria¶
- Particles that fail the estimator due to a geofence conflict are
counted as infeasible (not silently dropped) and reflected in
feasibility_rate. - Particles that fail landing-zone reachability (if landing zones are provided) are counted as infeasible.
- The
StochasticPropagationResultgains adropped_sample_countfield indicating how many samples could not be evaluated at all (estimator error, not a feasibility check). - The stochastic envelope JSON includes
dropped_sample_count. - The Markdown report includes a "Dropped Samples" row when > 0.
- At least 3 new tests: geofence conflict inflates infeasibility rate, landing-zone unreachability inflates infeasibility rate, dropped samples are reported separately.
Scope¶
estimator/execution/propagator.py— distinguish dropped (error) from infeasible (geofence/lz) particlesschemas/stochastic.py—dropped_sample_countfieldadapters/stochastic_markdown.py— dropped count rowadapters/stochastic_envelope.py— pass throughtests/test_stochastic_propagator.py— new tests
Notes¶
- This ticket fixes the denominator-correctness issue for the spatial constraints path (the energy-only denominator bug was already fixed in a prior change).
- Backwards compatibility:
dropped_sample_countdefaults to 0 and the golden fixture is unaffected when no particles drop.