If this is to be incorporated in Standard, might I suggest that some changes are made based on experience in Experimental? I am planning to make a few changes to this in any event along these lines, and this might be an opportunity for standardisation (no pun intended) across the two branches. In summary, the suggested changes are as follows:
(1) do not use a series of variables in convoy_t to store the data: add a new replace_datum_t object, and define a pointer to it in convoi_t, which, when NULL, indicates that no replacing is taking place; this will save memory (this is already implemented in Experimental);
(2) allow a current replacing instruction to be cleared before it is executed (this is also already implemented in Experimental);
(3) do not require convoys to go to the depot to be replaced - experience in Experimental shows that this causes large problems with congestion - instead, replace the convoy in situ once it is empty;
(4) allow vehicles in the convoy to be replaced by vehicles (including vehicles now out of production, even when the option to allow buying obsolete vehicles is disabled) from existing depots (this allows for proper cascading); and
(5) connected to the above, make all vehicles available in any depot of any player available from all depots, so that there is in effect a single stock of stored vehicles for each player from which either the replacer or a depot can assemble convoys.
Experimental also plans to implement a secondhand market in vehicles, which will be useful for online play. I am not sure whether this would be something that the Standard developers would like to do, but if so, then it might be worthwhile considering implementing the architecture for that alongside the above suggested changes.