mvk wrote:uci.html is 26kB, xboard.html is 96kB. Both are equally useful documentation for their standard. Where does the size difference come from?
The CECP specs to which you refer are extremely poor and verbose. They address many things that have nothing to do with the protocol. Like XBoard peculiarities, and how you have to use sdin/stdout in general to have an engine communicate with a GUI (buffering, etc.). I am pretty sure I could be describe CECP in 10KB of HTML.
Not only the resign and draw commands. It is also unneeded complexity: multiple ways to do the same thing. It is things like this: when I go back in xboard, I don't receive "force" and "setboard" with all the things you mention. I get "undo". Undo is a redundant command and yet it is mandatory to implement to get full functionality. Or if I retract a move while playing, I don't get 2 times "undo", I get ... "remove"!
The latter is pretty essential, as after the first "undo" the engine would immediately move again.
I agree that "undo" is troublesome, and in fact all my engines implement it internally in the UCI way: setup the board with the remembered FEN, and replay all moves.

I guess the point here is that CECP is actually two communication protocols in one: a protocol for engine-GUI communication and an interface for running engines from the command line. The "undo"/"remove" command belong to the latter; you would not think it so redundant when you want to take back a move and could only do it by retyping the entire game...
A good addition to CECP would be "feature undo=0", which would inform the GUI that the engine does not support "undo"/"remove", so that the latter could use the "new"/"force"/moves method to effectuate a takeback. Then the engine author that does not want to implement command-line usage would not have to implement that internally.
Actually I think it would be better if GUI's would use this method for take-back by default. Deprecate the "undo" and "remove" commands for GUI-engine communication.
Such convoluted things are the reason that when you start with uci you have full functionality quicker and can focus on search and evaluation sooner. And your users can run under any GUI of their choosing ofcourse. One more such thing: you can send "feature setboard=1", but as long as the GUI is allowed to send "rejected setboard", you must still support "edit" and all its drama.
I don't know any engine that does this, and they all seem to get away with it, so this seems mostly a hypothetical problem. Note that no one forces you to rely on optional protocol extensions. You can stick to the default, and you would not run the risk anything ever getting rejected.
But some GUIs need "setboard" and won't do "edit", so you must still have both. Argh.
That simply counts as a broken GUI. The specs allow a GUI to reject the optional v2 protocol extensions, but it does not allow (and has no mechanism for) the GUI rejecting the default protocol. A GUI that would do so is non-compliant.
With uci the gui has no such weird freedoms and that makes life easier for everyone. If you intend to give the user the full experience, you must implement the whole standard, not just the subset that lets you play a single game.
I agree that it was a bad mistake to add features setboard and san to CECP. In practice a situation has developed where v2 engines can assume feature setboard will never be rejected, and either don't implement setting up of positions at all, or provide setboard as the only method. Note that in UCI you can also still play games without implementing "position fen", and rely on "position startpos".
That is a constructed scenario which clearly didn't hinder adoption.
Apparently adoption doesn't mean a thing, if you can get adopted without supporting draw handling. This is in general quite common; in many areas the worst system dominates the market. (VCRs, PC operating systems...)