Preheat oven to 350F.
Pat short ribs dry with paper towels and season generously with salt and pepper.
Heat oil in a Dutch oven over medium-high heat until shimmering.
Sear ribs on all sides until deeply browned, about 3-4 minutes per side, working in batches to avoid crowding.
Remove ribs and set aside.
Reduce heat to medium and add butter to the pot.
Add diced onions, celery, and carrots and cook 8-10 minutes, stirring occasionally, until caramelized and golden.
Add garlic and cook 1 minute until fragrant.
Push vegetables to the side and add tomato paste to the empty space.
Cook tomato paste 4-5 minutes, stirring occasionally, until it darkens to brick color.
Sprinkle flour over everything and stir well to combine.
Cook 2-3 minutes to cook out the raw flour taste.
Whisk together red wine, dijon mustard, and beef stock in a measuring cup and season with salt and pepper.
Pour mixture into the pot and stir well, scraping up browned bits from the bottom.
Bring to a gentle simmer.
Nestle ribs back into the liquid so it comes about 3/4 of the way up the sides.
Tie thyme and rosemary together with kitchen twine and tuck between the ribs.
Add bay leaves to the liquid.
Cover tightly and transfer to oven.
Braise 3 to 3 1/2 hours until meat is fork-tender and practically falling off the bone.
Remove from oven and let rest covered for 30 minutes.
Remove and discard herb bundle and bay leaves.
Taste braising liquid and season with additional salt and pepper as needed.
Serve short ribs with braising liquid spooned over mashed potatoes, risotto, or polenta.