can't reject single char top level because domains
upgrade_index: clearer error handling on missing cache/index files