I'm pretty sure this is a timing issue. You are initializing the control and set the route right away in a route change event. If you defer setting the hash, it works: http://jsfiddle.net/cTpPx/2/
var AppController = can.Control({
'route': function(){
log('route empty');
setTimeout(function() {
window.location.hash = '#!latest';
}, 10);
},
'latest route': function() {
log('route: /latest');
}
});