To Matthew Wilkes: It is true that in military situations the tradeoffs of safety vs. utility are quite different.
However, I think this is one of those (many) cases where it is an "operator error" which a better design could have prevented.
In other words, I think it was a plain bug. Somewhere in the fire() function there should have been some check for:
distance(current_gps_coordinates, target_coordinates) < min_safety_distance
but there was not.