We had an incident recently where some code got released to live that was not scheduled to be released.
It had obviously been checked into the trunk. Which is fine i guess as you want to 'check in early, check in often'.
However in this instance it was not supposed to be released in the next release.
What kind of checks / strategy / process can be put in place to avoid code being released to live prematurely.
It seems to me even with Continuous Integration and Unit Tests this is a human procedure issue?
Amend your integration procedures.
If "going live" means someone executing some batch script - don't be surprised if this will happen again.
Also, consider branching. A common example might be to use the trunk for development, a separate branch for testing (say, gets merged once a week), and a final branch (from the aforementioned testing branch) for RTC.
This branch, before being deployed to production, should be tested thoroughly.