Thomas Dalton wrote:
I've been thinking about this problem, since it's going to get even worse with the new preprocessor. Currently, links in unfollowed branches aren't registered, but templates *are* registered in both branches. So if you have:
{{#ifexist: test | {{a}} | {{b}} }}
Initially [[test]] doesn't exist so {{a}} is displayed. Then [[test]] is created and the HTML cache for the page is invalidated via pagelinks. But the links tables are not updated, so although the page now contains the contents of {{b}}, it doesn't have a template link to it. So when [[Template:B]] is subsequently changed, the cache is not invalidated.
The solution is to add yet another tracking table.
Ah, I see the problem now. Is a whole new table really required? Can't #ifexist just be made to update the links table?
Having a whole new table which triggers link table updates (like templatelinks), but triggers only on creation or deletion and not change (like pagelinks) is the easy way to solve this problem. There are more general solutions, but they're more complicated.
-- Tim Starling