nestedContainer in KeyedEncodingContainer and UnkeyedEncodingContainer should be throwing

I mean concretely EncodingError. I'm not sure if this is what you mean with Encodable errors, but in case of EncodingErrors, you are indeed not in control (in understanding of control flow). Sure when you are debugging you know it, but in code when you are using e.g. JSONEncoder you do not directly know where the error comes from because it is passed from one encode(to:) implementation to the next via the method calls inside the encoder (you kind of passed the "control" to the encoder implementation). So you could of course also provide this information yourself there, but only in your own types, not Array, and therefor it is necessary for this in my understanding.

I don't think this is a hack, I got it from there:

It at least works better IMO, because this is an internal name and there is no guarantee that it won't change. If you think about a closed source Encoder with hidden implementation, it will definitely be harder to guess the name.