A craft is only ever added to storage.hovercrafts by the handler at control.lua:397, which is registered for on_built_entity, on_robot_built_entity and script_raised_built. A craft that comes into the world any other way is never added, so it never drifts, and there is nothing that catches up on it later.
Ways in that miss:
- on_space_platform_built_entity. It is registered at control.lua:709, but only inside the "if use_own_ev_lib" block, and it calls ev_lib.on_built, which is the electric vehicle charging library. It does not touch storage.hovercrafts.
- script_raised_revive, at control.lua:710, has the same problem: registered, but routed to ev_lib.on_built only.
- on_entity_cloned is not registered at all, so cloning a surface produces craft the mod does not know about.
- create_entity from another mod without raise_built = true. That one is arguably the other mod's fault by convention, but it is how I ran into this.
Suggested fix: pull the body of the on_built handler out into a register(entity) function and call it from on_space_platform_built_entity, script_raised_revive and on_entity_cloned as well; then add a cheap guard in on_player_driving_changed_state, or in the existing on_nth_tick(3) pass, that registers any isHovercraft vehicle that is not already on the books. The last one alone would make the whole class of misses self-correcting.
Found while testing Vehicle Physics against Hovercrafts, on Factorio 2.1.17.
This post was partially drafted by Claude Opus 5. It also performed most of the investigation of the failure mode that I encountered.