Melt butter over medium-low heat in a large pan or Dutch oven. Add garlic and onion. Cook for 1-2 minutes. Stir in celery and carrots, simmering for 3-4 minutes until softened.
Increase heat to medium and add ground beef/sausage. Season all over with salt and pepper. Cook until browned and no longer pink. About 5 minutes. Use the tip of a wooden spoon to break up the beef and pork into the smallest chunks possible.
Add the wine to deglaze the pan, scraping the bottom of the pan with a wooden spoon. Simmer until evaporated/mixture is dry, about 5 minutes.
Add tomatoes, crushing with a wooden spoon/spatula into smaller chunks. Add milk, beef broth, and chopped basil. Mix until incorporated and reduce heat to low.
Let simmer on the lowest heat setting so the sauce is just simmering. Simmer for 2-3 hours, uncovered, stirring every 30 minutes, until the sauce has thickened. You can use a spoon to skim some of the fat off the top if desired but I recommend you leave it. Stir to mix the fat with the sauce. Adjust with salt if needed. The sauce is ready when you can run a spoon through it and the bottom remains clean. If it collapses on itself or pools with liquid, simmer longer.
Preheat oven to 400°F.
Meanwhile, bring a large pot of salted water to a boil. Add the gnocchi and boil until they float to the top, about 3-4 minutes. Strain and add the gnocchi to a 9-inch cast iron skillet along with a few heaping cups of bolognese. Mix until fully incorporated.
Top with mozzarella and bake for 10 minutes, or until cheese has fully melted. Finish with a quick broil for a little golden char! Serve immediately garnished with chopped basil and freshly grated parmesan.