Task
Something a vehicle may be asked to do.
A QObject, so the task itself waits in the TaskQ and carries the waiting statistics. The load does not wait in a reported queue; its task does. That is also what gives an assignment policy a first-class object to rank and a bidding policy something to bid on.
Not sealed: Kotlin refuses sealed inner, and inner is forced by QObject. The hierarchy is closed at two members by construction, and the exhaustiveness that matters lives on ServiceKind instead.
Inheritors
Properties
When a vehicle committed. NaN until then.
Where the vehicle must end up.
The dispatcher that created it, so a task always knows where its wait is recorded.
Where the vehicle must go first. The destination itself for a task with nothing to collect, which is what makes a service task a one-stop tour.
The entity suspended on this task, if any. Null for a task a vehicle raised for itself.