Inconsistency between micromobility state machine diagram and list of transitions
Describe the issue with the specification This might be a minor issue, but I found some Inconsistencies between micromobility state machine diagram (v2.0.2) and list of transitions found here.
The following transitions are missing from the diagram but are present in the table:
- from state
non_contactableto stateavailablewith event typeagency_drop_off. - from state
non_contactableto stateavailablewith event typeprovider_drop_off.
Expected behaviour I would expect the diagram to reflect all the transitions listed in the table. Additionally, it’s unclear which should be considered the authoritative source. In this case, which should be followed? I’m currently assuming the table to be the source of truth, but maybe a sentence stating this would be useful.
Additional context
In my opinion, the current layout of the table contributes to confusion. I suggest breaking it into multiple tables, one for each state, to improve clarity:
Example of split MDS V2 State Machine Transitions Tables
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
available |
non_contactable |
comms_lost |
available |
non_contactable |
unspecified |
available |
non_operational |
battery_low |
available |
non_operational |
maintenance |
available |
non_operational |
off_hours |
available |
non_operational |
system_suspend |
available |
non_operational |
unspecified |
available |
on_trip |
trip_start |
available |
removed |
agency_pick_up |
available |
removed |
compliance_pick_up |
available |
removed |
decommissioned |
available |
removed |
maintenance_pick_up |
available |
removed |
rebalance_pick_up |
available |
removed |
unspecified |
available |
reserved |
reservation_start |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
elsewhere |
non_contactable |
comms_lost |
elsewhere |
non_contactable |
unspecified |
elsewhere |
on_trip |
trip_enter_jurisdiction |
elsewhere |
removed |
agency_pick_up |
elsewhere |
removed |
compliance_pick_up |
elsewhere |
removed |
decommissioned |
elsewhere |
removed |
maintenance_pick_up |
elsewhere |
removed |
rebalance_pick_up |
elsewhere |
removed |
unspecified |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
missing |
available |
agency_drop_off |
missing |
available |
located |
missing |
available |
provider_drop_off |
missing |
available |
unspecified |
missing |
elsewhere |
located |
missing |
elsewhere |
unspecified |
missing |
non_operational |
located |
missing |
non_operational |
unspecified |
missing |
on_trip |
located |
missing |
on_trip |
unspecified |
missing |
removed |
agency_pick_up |
missing |
removed |
decommissioned |
missing |
removed |
located |
missing |
removed |
unspecified |
missing |
reserved |
located |
missing |
reserved |
unspecified |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
non_contactable |
available |
agency_drop_off |
non_contactable |
available |
comms_restored |
non_contactable |
available |
provider_drop_off |
non_contactable |
available |
unspecified |
non_contactable |
elsewhere |
comms_restored |
non_contactable |
elsewhere |
unspecified |
non_contactable |
missing |
not_located |
non_contactable |
missing |
unspecified |
non_contactable |
non_operational |
comms_restored |
non_contactable |
non_operational |
unspecified |
non_contactable |
on_trip |
comms_restored |
non_contactable |
on_trip |
unspecified |
non_contactable |
removed |
agency_pick_up |
non_contactable |
removed |
comms_restored |
non_contactable |
removed |
decommissioned |
non_contactable |
removed |
unspecified |
non_contactable |
reserved |
comms_restored |
non_contactable |
reserved |
unspecified |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
non_operational |
available |
battery_charged |
non_operational |
available |
maintenance |
non_operational |
available |
on_hours |
non_operational |
available |
system_resume |
non_operational |
available |
unspecified |
non_operational |
non_contactable |
comms_lost |
non_operational |
non_contactable |
unspecified |
non_operational |
removed |
agency_pick_up |
non_operational |
removed |
compliance_pick_up |
non_operational |
removed |
decommissioned |
non_operational |
removed |
maintenance_pick_up |
non_operational |
removed |
rebalance_pick_up |
non_operational |
removed |
unspecified |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
on_trip |
available |
trip_cancel |
on_trip |
available |
trip_end |
on_trip |
elsewhere |
trip_leave_jurisdiction |
on_trip |
non_contactable |
comms_lost |
on_trip |
non_contactable |
unspecified |
on_trip |
on_trip |
changed_geographies |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
removed |
available |
agency_drop_off |
removed |
available |
provider_drop_off |
removed |
non_contactable |
comms_lost |
removed |
non_contactable |
unspecified |
From vehicle_state |
To vehicle_state |
With event_type |
|---|---|---|
reserved |
available |
reservation_cancel |
reserved |
non_contactable |
comms_lost |
reserved |
non_contactable |
unspecified |
reserved |
on_trip |
trip_start |
Yes you are right, looks like it's missing from the diagram. And agree splitting up the table would be useful! We can work to fix this in this and other modes for MDS 2.1.
Thank you for your reply, @schnuerle!
I also noticed another small inconsistency with the diagram. I considered opening a separate issue, but thought it might be easier to mention it here first and only create a new one if needed.
In the diagram, it looks like any state can transition to and from the Non-Contactable state. However, the Missing state is handled differently and doesn’t follow this pattern (i.e., Missing cannot transition to Non-Contactable directly). This seems consistent with the list of transitions documented here.
Should the diagram be updated to make it explicit that Missing is excluded from the any state group?