I think there are some problems with it.
Why does it allow a username/password in the URL even though there is no way for the protocol to use it (and it cannot send this to the server)?
It also says "The fragment component is allowed but has no special meaning"; however, the fragment component is meaningful but that depends on the file format and not on the protocol, and it is meaningful to the client and not to the server.
It also does not distinguish GET requests by PUT (or POST) requests.
There is no range requests and no response header indicating the file size (Gemini also lacks this, but it does use TLS close-notify to tell that it is finished).
I dislike that Gemini requires TLS, but Spartan does not allow TLS at all. (I think it makes more sense for TLS vs non-TLS to be distinguished by the first byte that the client sends to the server (and the client distinguishes them by the URI scheme); using separate port numbers is not required.)
Spartan also has some good ideas, such as the =: link type.
I wrote a document about "small web" protocols: scorpion://zzo38computer.org/smallweb.txt