But that sort of caveat could be placed on every method in the compiler. There is a bunch of stuff you have to know, there's no getting around it.

Things to confuse you further: you don't get a ClassInfoType for tpeHK. You might get one for "info". tpeHK will give you a typeref with no type args. tpe_* will give you one with dummy type args. "typeSignature" in the reflection api corresponds to "info", not tpeHK. It will give you a polytype before erasure and a classinfotype after erasure. If you normalize the typeref you got via tpeHK you can find another polytype.

Also, there are a lot of phases after typer where it would still work the same as does during typer, so it's not accurate even if we forget the phase details.