Whisk egg yolks, sugar, and cornstarch in a bowl until pale and smooth.
Simmer milk and cream in a saucepan over medium-high heat, whisking occasionally.
Slowly whisk 1/2 cup hot milk into the yolk mixture to temper it.
Pour the tempered mixture back into the saucepan and cook over low heat, whisking constantly, until thickened.
Stir in milk chocolate, cocoa powder, vanilla, and salt until smooth.
Strain the custard into a clean bowl, cover with plastic wrap, and chill for at least 2 hours.
Preheat oven to 375°F (190°C) and line baking sheets with parchment.
Boil water, butter, sugar, and salt in a saucepan.
Stir in flour and cook for 2-3 minutes until a film forms on the pan bottom.
Cool the dough for 2 minutes, then beat in eggs one at a time until smooth.
Pipe or spoon dough onto baking sheets, brush with egg wash, and smooth tops with a wet finger.
Bake for 30-32 minutes until golden and firm; do not open the oven during baking.
Cool the puffs completely on a wire rack.
Cut a small X in the bottom of each puff and pipe in the chilled filling.
Pour hot cream over chopped chocolate, let rest, then stir gently until smooth.
Dip the top of each filled puff into the ganache and let set on a rack.