This is the problem, or rather what is missing from it:
add_filter( 'theme_page_templates', __NAMESPACE__ . '\register_plugin_templates' );
Specifically, you never told it that your function can accept 3 parameters, so it assumed it only accepts 1 as that’s the absolute minimum needed for a filter to work. Then on top of that, none of your parameters are optional, they’re required/mandatory. So PHP doesn’t know what to do and generates an error.
Think of it this way:
If you were at a safe/vault and was told that to unlock it you had to place all 3 hands in the slots provided, what would you do? Most people have 2 hands, and others fewer, and you can’t use somebody elses hand, so what are you supposed to do? It needs 3!
The official docs cover what parameters
add_filter takes and what they do:
add_filter( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ): true
Your code only provides the first 2, and doesn’t define the priority or accepted arguments number.