My UR5e tray sequence can place a spacer and stop before saving the advance, leaving restart eager to repeat it. The counter is certain; the physical transfer isn't. I need a better recovery model.
Separate the source, held spacer and destination states, tied to the identified trays and transfer attempt. An uncertain placement needs reconciliation before any repeat or advance. Have the integrator define what evidence and responsible person resolve it.
Draft now holds uncertain placement instead of offering repeat. We track the two trays and the spacer attempt separately. The awkward example is a tray exchange while the application was stopped.
Include a definitely completed transfer and a definitely unstarted one too. Does reopening after a saved reconciliation preserve that decision? A recovery screen should not create the same uncertainty on every startup.
Offline cases now keep those distinctions across reopening, including the exchanged-tray mismatch. The operator walkthrough still needs doing. At least the counter no longer gets the casting vote.