Warm the butter in a heavy-bottomed saucepan over medium heat until it foams. Add the chopped onion, carrot, and celery and cook, stirring occasionally, until the onion softens and turns clear — about 6 to 8 minutes. Don't let anything brown at this stage.
Sprinkle the flour evenly over the vegetables and stir constantly to coat everything well. Keep stirring and cooking this roux until it deepens to a light golden brown and gives off a toasted, almost nutty smell — this takes 3 to 4 minutes. Watch it carefully because flour can go from perfect to burned quickly.
Pour in the warm beef stock gradually, whisking constantly to prevent lumps from forming. Stir in the tomato puree, then add the peppercorns, bay leaf, parsley, and thyme. The sauce will look thin at first but will thicken as it simmers.
Bring the mixture to a gentle simmer, then reduce the heat to maintain just barely bubbling at the surface. Let it cook, stirring occasionally, until it coats the back of a spoon and has reduced by about one-third — this takes 20 to 30 minutes. You'll notice it getting glossy and more concentrated.
⏱ 25 min
Use a spoon or ladle to skim off any fat or foam that rises to the surface. This step keeps your finished sauce clean and smooth-tasting.
Pour the sauce through a fine-mesh strainer into a clean bowl, pressing the solids gently with the back of a spoon to extract as much liquid as possible. Discard the solids and use the sauce immediately, or press plastic wrap directly onto the surface to prevent a skin from forming if storing.