I'm not emotionally invested in the outcome here (I'm ok with whatever we decide) but I got confused (and I'm still a little confused) because we've considered a lot of different options.
Re-reading one of
@Bryan Henry's early posts in the CTP-035 (2 of 3) thread, I believe he proposed always using arrays for properties that accept multiple values because that has a couple of useful properties: It is self-documenting (you always know which properties accept multiple values and which don't), and (perhaps less important) they are easier to extend from one item to more than one, by just adding an item to the array (rather than first converting a string to an array of string, then adding the new property).
Later, you're right, Gary, I think the final agreement was to allow either strings or arrays of strings for capability keywords. (I assumed by "capability keywords", you meant only the keyword property names that identified the capability type, like "protocol" and "storage", but maybe you meant all properties of all capabilities.)
My question now is, are we really doing this to be helpful to the developers or are we doing it because it looks cleaner?
I think an argument can be made that this is less helpful, particularly for some properties where it's not inherently obvious if they must be single values or can have multiple values. (So, maybe, for consistency, we shouldn't allow singular strings for "protocol" and just bite the bullet, and convert them all to arrays... We have a tool to do that now!)
But, if you want to extend this rule to all properties that can accept multiple values (assuming no one objects) I won't object to it, and I don't think it has any substantial effect on the other parts of CTP-035.