Show why a phase failed on the FAIL screen
Operators now see the reason a unit failed right on the FAIL screen, instead of digging through the run logs to decide whether to retest, reseat a cable or reject the unit.
- Added the message of
phase.fail("...")to the FAIL outcome screen, in place of the "Not run" reason of the phases cancelled after it; the phase and the run stay FAIL. - Added the message to the uploaded run, where it shows in the phase details and in the API, and to
tofupilot run --json; messages fromphase.skip(),phase.stop()andphase.retry()come through too. - Improved the console output so each message is printed once, and still shown with
--quiet.
