Caramelize the onions. In a large heavy pot or Dutch oven, melt the butter with olive oil over medium heat. Add the sliced onions and salt. Cook, stirring occasionally, for about 25–30 minutes, until the onions are soft and golden.
Add sugar and garlic. Sprinkle in the sugar and cook for another 10–15 minutes, stirring more frequently as the onions deepen in color. Add the garlic and cook 1 minute more, just until fragrant.
Deglaze the pot. Pour in the wine and scrape up any browned bits from the bottom of the pan. Let it simmer for 3–5 minutes, reducing slightly.
Build the broth. Add the beef stock, thyme, bay leaf, and Worcestershire sauce. Bring to a boil, then reduce heat and simmer gently for 20–25 minutes. Season with salt and pepper to taste. Remove the bay leaf before serving.
Prepare the bread topping. While the soup simmers, preheat the oven to 400°F (200°C). Arrange baguette slices on a baking sheet and toast for 5–7 minutes until lightly golden.
Assemble and broil. Ladle hot soup into oven-safe bowls. Top each with 1–2 toasted baguette slices and a generous handful of shredded Gruyère. Place the bowls on a baking sheet and broil for 2–4 minutes, or until the cheese is melted, bubbly, and lightly browned.
Serve hot. Let the bowls cool slightly before serving, they’ll be very hot! Enjoy the aroma and dig through that cheesy crust to the savory broth below.