I would have the server return all the decodeable parts, and return a NO
[UNKNOWN-CTE]. From that the client should be able to figure out what's going
on and act appropriately.
In this case, should the server omit the BINARY response or can it return NIL for the undecodable part (in addition to the NO response)? I know that typically NIL is used when the client asks for a part which doesn't exist, but could it be used as a generic response meaning "i can't fetch this part"?
Since others aren't answering, I'll say my opinion:
Client should be able to read untagged FETCH reply and save things in it permanently to cache without having to figure out what kind of commands it is currently requesting, and especially without having to wait for tagged OK/NO to determine if the NIL reply meant that the part doesn't exist or if it was just unknown decoding.
So omit it entirely if you don't know how to deal with it.
Similarly, what should the response be for BINARY.SIZE on a non-existent part? Do we omit the response and return a NO? Or do we succeed with a size of 0 (zero)?
I'd say 0 with tagged OK. Just like body[1234] doesn't return NO either.