" 
 :::::::: Thanks for poking me about this. I worked on the code a bit tonight and the new code is running now. It should update the report at  when it finishes. 
 :::::::: Having looked at some of the full output, I removed some prefixes and suffixes. The current logic is below. Some of these exclusions could probably be lifted, though. For example, I think the templates below Child_taxa// are legitimately unneeded. And by excluding pages such as Template:Adhd/doc, you miss the fact that the template has been moved without its corresponding /doc page. (Not that the /doc page looks particularly helpful, but still....) 
 :::::::: Anyway, just something to consider. The unfiltered list was about 31,533 results (that's excluding redirects and limiting to only the Template namespace). The filtered list should be substantially smaller. It's set to paginate, so it won't break anything, but it might end up being quite a few subpages. Let me know what other exclusions you'd like to see. I'll get around to the category membership at some point.    

  
     if (not page_title.endswith('/doc') and 
         not page_title.endswith('/testcases') and 
         not page_title.endswith('/sandbox') and 
         not page_title.startswith('Editnotices/') and 
         not page_title.startswith('Cite_doi/') and 
         not page_title.startswith('Cite_pmid/') and 
         not page_title.startswith('TFA_title/') and 
         not page_title.startswith('POTD_protected/') and 
         not page_title.startswith('POTD_credit/') and  
         not page_title.startswith('POTD_caption/') and 
         not page_title.startswith('Did_you_know_nominations/') and 
         not page_title.startswith('Child_taxa//')): 
         output.append(table_row) 
 "