Here's the descriptive way to specify how the diagnostic keys work.
1) We reserve every key which begins with a lower case letter 2) We say nothing about anything else 3) All keys are optional That's it. Remember, the only reason we're saying anything about the keys is because we want to avoid future official keys from clashing with user defined keys. That is the *only* reason we need to nail this down and it allows us to say very little. This makes deciding whether or not something is reserved a simple matter of running islower() on it in POSIX or Unicode or whatever character set you're using. Should it become too difficult to nail down what "lower case" means we can simply reserve [a-z] and say to avoid anything that might be ambiguous. This also means we don't have to get bogged down in edge cases while still allowing almost complete freedom of movement for the users. Remember, the YAML diagnostics are a brand new thing and a huge addition of flexibility to TAP. People are going to want to do all sorts of wild things with it, let them. Let's not wall off the playground because someone might skin their knees. * What about keys with no concept of case? Numbers, asian characters... They're not lower case, we don't reserve them. Have fun with them. * What about ambiguously cased words like that Hungarian i thing that comes out as both upper and lower? We reserve it because it is lower case, and if you want to shoot yourself in the foot with ambiguity, or if you're Hungarian, that's fine by me. * I like using "X-foo" for my custom keys Ok, enjoy! * I like using "Foo" for my custom keys Ok, have fun. * I like writing my custom keys in Klingon! Ka'plah! Just make sure you don't start it with a lower case Klingon character and I'll allow you to die with honor. * What if I want to check that my TAP producer is outputting the right keys? What if I want to force everyone in my group to write their keys in the same style? Write a strict validating parser and use that. We all know it's best to automate tests. * What if I want to write my keys in some funky character set? Go ahead. Nobody else is likely to understand it, but that's ok. They're your custom keys for your use. * It's important to me to differentiate between user defined and reserved keys and I display TAP in a way that doesn't show upper case vs lower case well! What now? Use a prefix that's not ambiguous to your display. Or pick a better font, this one is going to cause you all sorts of grief. How are you seeing the difference between the "have" and "want" value? What about all the other protocols and languages and commands that are case sensitive? -- Stabbing you in the face so you don't have to.