revoke
Takes a task back from a vehicle that has not yet collected its load, and gives the vehicle something else to do.
This is the capability the passive paradigm has no place for. There, a transporter belongs to the entity that seized it for the whole journey, so a cart three-quarters of the way to a far pickup cannot be turned round for a nearer one that has just appeared — not because the movement machinery could not do it, but because there is no object whose business it would be to decide. Here there is.
The task returns to POSTED and is not re-enqueued: it never left the queue, so its accumulated wait survives. Re-enqueuing would reset the wait and make a load that has been waiting longest look as though it had just arrived — corrupting both the statistic and any age-based selection rule, in the one case where the load has most cause to complain.
The vehicle is not told to stop. It is redirected, and the space layer decides when: a vehicle mid-traversal defers to the next zone boundary, because something between two places cannot turn round; a blocked vehicle gives up its wait first, so it is not left on a waiter list for a journey it is no longer making.
Throws
when the load is already aboard, naming both participants.