EDIT: This was a lucky find. I'd made an IsNew() method for that page type to determine if the ArticlePages are recent. Turns out an isNew() method is used in SiteTree's isPublished() method and my custom one was overriding it. Yay!!!
I am having a section of articles managed by other people. Until recently, everything was working alright. I've worked for a few days and today I noticed that the articles do not have an Unpublish button anymore, only "Delete from Draft site". If the button is pressed, the articles remain live. The only thing left to do in this case is to go to the SiteTree and use a Batch option of Delete from Live site. I ran a few SiteTree cleanup scripts (remove orphans), but I am guessing if there was damage done to the SiteTree tables other page types wouldn't have Unpublish as well.
I will be having unskilled people working with this so this is quite crucial.
Are there any common causes for the Unpublish button to disappear? I have all my permissions set. I'm really really stuck with this, please help!
PS I also noticed Unpublish doesn't actually unpublish ANY page...