In a large mixing bowl, combine the chicken cubes, full-fat yogurt, grated ginger, grated garlic, lemon juice, turmeric, Kashmiri chili powder, fenugreek (if using), and garam masala. Season with salt and pepper. Mix well until the chicken is fully coated. Cover the bowl with plastic wrap and let it marinate in the refrigerator for at least 1 hour, or overnight for maximum flavor.
In a large skillet or Dutch oven, heat 3 tablespoons of ghee or oil over medium-high heat. Once hot, add the marinated chicken to the skillet in a single layer (you may need to do this in batches). Cook for about 5-7 minutes until the chicken is browned and cooked through. Remove the chicken from the skillet and set aside.
In the same skillet, add a bit more ghee or oil, if necessary. Add the diced red onion and sauté until softened, about 3-4 minutes. Stir in the grated ginger, grated garlic, and sliced serrano pepper. Cook for an additional minute until fragrant.
Sprinkle in the Kashmiri chili powder and garam masala. Stir well to combine with the onion mixture. Then, add the tomato puree and chicken stock, stirring until everything is incorporated and simmering.
Reduce the heat to low and stir in the heavy whipping cream, allowing it to meld with the tomato mixture. Gently return the cooked chicken to the skillet, ensuring it is well coated in the sauce. Allow everything to simmer together for an additional 10 minutes, letting the flavors develop.
If desired, sprinkle in the optional fenugreek and mix well. Taste the sauce and adjust seasoning with salt and pepper as needed. Remove from heat and garnish with finely minced fresh cilantro.