Moreover, when the server asks the client whether it supports a feature, and the client decides it does not, we want the client to then be able to ask the server where it can obtain that functionality. Okay, then we're talking about the same thing. Works for me. I think I'm making terminology mistakes. Using this language, we believe that protocol negotiation must be client-driven.
Feature negotiation can go either way, depending on who wants to know what.
So I agree exactly with your first paragraph above. I confused the issue in my last message when I said that feature negotiation is server driven. I think that in general it will be largely server-driven, and so far I've been following the way Jupiter did things, by having the server send the client a features request after the protocol is agreed on. Then the client replies with a list of things it can do. Based on the type of client it is and the things it says it can do, the server may not need any more information.