Thanks for looking. It's not much of a big deal to edit PuppetCityPopup.lua, but it'll be a bit of a chore to keep AIs from breaking the rules. I suppose I could hook something up to SerialEventCityInfoDirty, but yeesh, that'll be a performance hit.
Regarding the Promotion durations, I did test it out by adding in a few simple promotions with the tag and it worked, but it was a rather quick test. I will test them more thoroughly soon, particularly to make sure they work across saving/reloading.