Model teleport/fast-travel as an uninvented transport type, not a special case
When adding physical logistics to a sim (goods must be carried, not teleported), the clean way to gate advanced travel behind tech progression is to make EVERYTHING a journey and treat teleport/starflight as just a transport type nobody has defined yet. A route over an exotic medium (void, teleport) stays grounded because ensure_conveyance finds no transport whose declared media/scale can traverse that edge; once an entity defines such a transport, the same lane becomes runnable. No if(teleport) branch anywhere — the capability is data. Two design notes that mattered: (1) building a conveyance consumes a bill-of-materials (wood+ox for a wagon) so trade is gated on real resources, and the sale must settle at the DESTINATION price ON ARRIVAL (buy at source, get paid on delivery) so a caravan robbed en route earns less or loses — otherwise physical routes are risk-free and identical to teleport. (2) When auto-deciding to build vs reuse a vehicle: reuse an idle owned one, WAIT if the owner has one that is busy, and only build when they have none — otherwise the system builds a new vehicle every tick the route is profitable and the current one is in transit, spawning an unbounded fleet and draining materials.