This is how the UW campaign invalidation mechanism works in theory:
- when the campaign configuration is saved, CampaignHooks::onPageContentSaveComplete parses all the wikitext fields and puts all templates into the templatelink table as if they were used on the Campaign: page itself
- CampaignHooks::onLinksUpdateComplete monitors changes to the linked templates and calls UploadWizardCampaign::invalidateCache when one of them changes.
This looks sound but doesn't seem to work in practice: Campaign:tos-rs has a missing template and the cache persisted when it was created. (Could be a side effect of T104395 but changing the content type is a proper edit which should have updated the link tables.)