Depends on whether you're talking to yourself or ever want to talk to another implementation (or pass through a middle box that may inspect your flow).
As long as you're talking to yourself, a lot of the stuff doesn't matter. When you're talking to other implementations, those things may suddenly turn out to be important.
Example: msid will only affect an identifier on the other side. If you never look at that identifier, it doesn't matter what it is. If you're talking to another app that DOES look at the identifier .... you'd better play by the rules, or you may have hard-to-debug problems.