Nice, thank you!
My feeling is that a generic function with syntactically explicit type variables should still be treated as generic, with all of its typevars, even if they are unused. This matches the runtime introspection, and I think gives the least confusing results in the face of the new ability to explicitly subscript functions. So this would be an area where mypy would be treated as out-of-conformance.
The kinds-of-Callable issue remains the most thorny for me. It is true that there are existing unsoundnesses in the spec, but that doesn’t make me eager to add more of them.
This seems like an unpleasant footgun to leave laying around. You have some code that explicitly subscripts a function (maybe from a third-party dependency), later an upgrade to that dependency changes the function to a partial (maybe even only in certain runtime codepaths, so a quick smoke test with the new dependency version seems fine), and now your code blows up with a runtime exception in production.
I think what seems especially unpleasant about this is that it’s not just “the type checker did not catch a runtime exception”. It’s “a code change that exists only for the sake of static type checking itself broke runtime, and the static type checker can’t help you avoid that.”
So I have to say that while I don’t love blocking this PEP on the more-kinds-of-callables discussion (which hasn’t even reached PEP stage yet, and may end up itself blocked on intersections), I also remain hesitant to move forward on PEP 718 with this hole in it.
Other than that issue, I’m satisfied with your/Fable’s take so far, and would be happy to see an updated draft of the PEP text addressing my comments.