prop/lib/microwaveprop/rover_planning
Graham McIntire 2c88fba1df
feat(rover-planning): multi-band missions + smart reconcile
Mission now carries bands_mhz ({:array, :integer}) — operator picks
one or more bands as multi-checkboxes. enqueue_paths_for builds the
cross product (rover x station x band) and persists each tuple as its
own Path row keyed by (mission_id, rover_location_id, station_id,
band_mhz). The path-profile worker reads band_mhz from the path
itself (legacy single-band jobs without band_mhz in args still resolve
to their unique row).

replace_mission_paths/1 is now a thin alias for reconcile_mission_paths/1
which diffs desired vs actual: stale tuples (old band that the user
unchecked, station they removed, rover-site they deleted) get dropped,
new tuples become :pending and enqueue, surviving :complete rows are
left in place — no more wholesale destruction of already-computed
paths on every edit.

The show table gains a Band column, and band_label() in the mission
summary becomes bands_label() (joins the list with commas).
2026-05-03 14:08:49 -05:00
..
mission.ex feat(rover-planning): multi-band missions + smart reconcile 2026-05-03 14:08:49 -05:00
path.ex feat(rover-planning): multi-band missions + smart reconcile 2026-05-03 14:08:49 -05:00
station.ex feat(rover-planning): /rover-planning page with path-profile worker 2026-05-03 11:04:11 -05:00