> I've never heard Python or Ruby referred to as untyped
Well, now you have! Here are some examples:
https://0xda.de/blog/2024/03/untyped-python-sucks/
https://lucumr.pocoo.org/2023/12/1/the-python-that-was/
In fairness I think it is a fairly recent linguistic shift, probably because there's no debate between weakly typed and strongly typed - strongly typed is oblivious the right answer. Instead the debate is between dynamically-typed-without-static-type-annotations and statically-typed-or-dynamically-typed-with-static-type-annotations, but obviously people need a more succinct term for that.
> Like, no one would call Ocaml untyped if you used type inference and didn't spell them out yourself... Or if you used the auto keyword everywhere in C++... The Ruby and Python runtimes both definitely enforce types.
Static type inference still counts as having static types. That's totally different to dynamic typing without static type annotations ("untyped").