I've simplified this repro case down to just this:

I expected the argument to have a wavy red underline telling me that the argument I'm passing is incorrect. It does know the type:

My original use-case was typing an argument with a template type from an abstract class, e.g.:
<?php
/**
* @template T
*/
abstract class Outer {
/** @param T $arg */
abstract function do_thing($arg): void;
}
/**
* @extends Outer<int>
*/
class Child extends Outer {
/** @param int $arg */
function do_thing($arg): void {
}
}
so it'd be nice if that worked too, but the very basic case seems pretty weird.