I bought my new phone online, and selected the number porting option. To be helpful, T-Mobile pre-activated my service. Unfortunately, I don't have my phone yet, but this means that AT&T have already canceled my old line. So now I have no phone until Monday. Oops.
On the plus side, AT&T didn't charge me an ETF, or at least they haven't yet, so maybe the whole "unsubsidized equipment" thing means they're being reasonable by default even though they claimed they wouldn't be. I was ready to be all indignant about that, but I guess all my front-loaded indignation is enough.