i have encountered the "no optional fields on network messages" argument before, often from nominative type likers
but in practice, new fields are always optional: clients need to be able to downgrade requests to talk to old servers
and servers have to be able to upgrade old requests to avoid having 200 code paths
really you only have two types of network message: every field is optional
and the three or four cases where that's not true, like "vec3"