Hm. Consider the case of Inquisitor, where the upgrade from 1.0 -> 2.0 cost money, but 3.0 was released for free. There are multiple "paths" from 1.0 to 3.0; one of them's free, and one of them costs money!
If the suggested implementation is "just check whatever's latest," that does solve this problem, but it fails for the following case:
2.0 is a paid upgrade from 1.0, so the developer adds the "paid" tag. Then 2.1 is released. If the developer puts the "paid" tag on 2.1 to restrict 1.0 users again, users of 2.0 won't get the free upgrade! I guess one alternative is to use uinque tags for each branch point as well. But meh...
Hm. Consider the case of Inquisitor, where the upgrade from 1.0 -> 2.0 cost money, but 3.0 was released for free. There are multiple "paths" from 1.0 to 3.0; one of them's free, and one of them costs money!
If the suggested implementation is "just check whatever's latest," that does solve this problem, but it fails for the following case:
2.0 is a paid upgrade from 1.0, so the developer adds the "paid" tag. Then 2.1 is released. If the developer puts the "paid" tag on 2.1 to restrict 1.0 users again, users of 2.0 won't get the free upgrade! I guess one alternative is to use uinque tags for each branch point as well. But meh...