Not sure how to codify this into a rule or something, but putting it out there for thought and discussion.
Themes should not “do” anything merely from their files being loaded. I know there’s been ways to have themes do something on “activation”, but in general, this is bad.
This gets really, really bad with 3.4 and the theme customizer. See, a theme has no idea if it’s actually live or just being displayed in the customizer. So if a theme does something like changing the blog settings or some such thing just because it’s loaded, then this could cause weird side effects when it’s not actually the active theme. Nobody wants to preview a theme and have their main blog page suddenly change.
This “don’t do anything by default” includes changing anything in the database whatsoever, writing files, making posts, etc. All actions taken by a theme must in some way actually be user-initiated.
I’ve made a few changes to the theme uploader tool. There shouldn’t be any visible changes, but email me if anything looks weird on the next few theme tickets. Thanks!
(It’s mostly just prep work for proper child theme support, nothing of special interest.)