In a wide cooking pot with handles ( I use a 3-quart, 12-inch wide pot), heat up mustard oil on medium heat until lightly smoky. Lower the heat and add the whole spices. Let them sizzle for 8–10 seconds to release their aroma taking care not to burn.
Then add the onions. Cook the onions over medium-low heat, stirring often, until they turn golden brown. This takes about 8–10 minutes and is a key step in the color and flavor of your curry, please dont rush.
Add ginger and garlic pastes, stir to combine, then add the ground spices (except garam masala) along with a splash of water. Cook this mixture for 1–2 minutes until the spices no longer smell raw.
Add the tomato puree next and cook for another 2–3 minutes, stirring, until the masala thickens slightly and the oil begins to separate at the edges.
Lower the heat and add whisked yogurt gradually, stirring continuously as you add it to prevent curdling. Continously keep for at least 2 minutes after you've added yogurt. Cook until the yogurt fully blends into the masala and the oil starts to separate again.
Season with salt, then add 1 cup warm water to adjust the consistency of the gravy. Bring the masala to a gentle simmer.
Carefully slide the koftas into the simmering gravy in a single layer, without piling. Gently swirl the pot to move the koftas around. Avoid stirring, as this could cause them to break.
Cover the pot and let the koftas cook on low heat for 20–30 minutes, checking once or twice. The koftas will shrink slightly and absorb the rich flavors of the curry as they cook. Add a splash of water or as needed if the masala gets too thick or to adjust the consistency of the gravy.
Once done, turn off the heat, sprinkle garam masala over the curry, and let it rest for 10–15 minutes to allow the flavors to meld. Garnish with chopped cilantro and serve warm with plain rice or your favorite flatbreads.