Helpful Matt commented out a section of code that determines whether or not you've kept a message, which had the effect that you were able to keep a message, and it'd show up as being kept, but wouldn't toggle over to "Unkeep", effectively making it possible to try to keep it twice, which the db doesn't like.
I've fixed it in development and hopefully Matt will be able to test it and throw it into production with everything else today/tonight.