It took some time to figure out because it required breaking some orthodoxy, but I'm happy with the result.
The thresholds are documented at https://devcenter.heroku.com/articles/heroku-postgres-ha#fai....
The promotion is done by rebinding the URL of the database and restarting the app. This shares mechanism neatly with changing of passwords, which is one reason we decided it was worth throwing out network-transparent orthodoxy when it came to HA: the clients must be controlled anyway to deal with security considerations.