There is a "sub-version" field that I believe it is a string rather than a numeric value that is transmitted with the version message. This might be useful to be used in a fashion like the HTTP headers that identify the browser/operating system/version identification for a particular client for general identification purposes on the network and could be useful for an individual client which is playing around with experimental features to put that into the header. A dozen extra bytes would not overwhelm the protocol in this case, particularly as it is transmitted only once per session and not per message.
In this case, the "version" field would indicate the protocol version (however that is defined) for the network as a whole that you are using that you guarantee to follow that protocol and any extensions are simply on top of that. Any implementations ought to be 100% compatible with that protocol so far as anything transmitted from your node to any other node should follow that protocol unless it specifically identifies a fellow peer with a specific sub-version.
Also some thought should be given on how the protocol should evolve.
What governance rules should be put in place ?
I agree that the governance of the protocol documentation ought to be established in some fashion so far as "blessing it" as "official" when the time comes. I created
this specification based upon the source code but I know full well that it is missing some gaps, particularly right now on block and message acceptance rules and chain forking policies, as well as references to the hashing algorithms used. My hope in creating that document was to eventually get it to some point that it would be "blessed" as the formal spec for clients like Cdecker is doing right now.
I really don't know what the official client is putting into that field right now, but it might solve the problem at least temporarily in regards to a specific re-implementation of the protocol.