Perhaps I’m just failing to communicate this well, so I’ll try harder. 
The distinction in my head is, if I know the semantics of Rust 100% and I’m looking at an expression or statement, how much extra context is required for me to know what the semantics of this expression happens to be.
A variable declaration for a value results in that value being dropped at the end of scope unless it is moved before the end of scope. The compiler doesn’t make a choice based on non-local information, which makes it not part of the category of ergonomic features I’m attempting to define.
I actually agree with this one, it’s the compiler making a choice based on non-local information. I don’t think it’s too bad, mostly because traits have to be explicitly brought into scope for them to be considered and there’s a chance that the signatures of the inherent and trait method conflict in a way that results in only one compiling. Overall, I think this one is sort of worth it, cause using UFCS all the time would be a bit much.
Integer overflow semantics are completely local and therefore, they aren’t part of the category of ergonomic features I’m attempting to define.
Like I clarified above, this my categorization assumes perfect knowledge of the language. The question is about how much non-local context is required to determine the semantics of a specific expression or statement. If I see a statement of the form let Foo { y } = x; what can I know about that statement and the semantics of it? Before match ergonomics, assuming it compiles, the possible valid semantics are quite low. Similarly for foo(&x);, before deref coercion.
Hopefully I’ve conveyed that this isn’t about users not knowing the language well enough.