01 - Pat the lamb shanks thoroughly dry with paper towels and season generously on all sides with salt and pepper.
02 - In a large heavy-based pot or Dutch oven, heat the vegetable oil over medium-high heat. Sear the lamb shanks on all sides until deeply browned, approximately 3-4 minutes per side. Remove from pot and set aside.
03 - In the same pot, add the sliced onions and sauté until golden brown and caramelized, about 10 minutes. Stir occasionally to prevent burning.
04 - Add the minced garlic and grated ginger to the caramelized onions. Cook for 1-2 minutes until fragrant, stirring constantly to prevent garlic from burning.
05 - Stir in all ground spices (coriander, cumin, garam masala, turmeric, chili powder, black pepper) along with whole spices (bay leaves, cloves, cardamom pods, cinnamon stick). Toast for 1 minute, stirring constantly to release their aromatic oils.
06 - Add the canned chopped tomatoes to the pot. Cook for 5 minutes, stirring occasionally, until tomatoes soften and release their juices, forming a thick masala base.
07 - Return the seared lamb shanks to the pot. Pour in the stock and bring to a gentle simmer. Ensure the shanks are partially submerged in the liquid.
08 - Cover with a tight-fitting lid, reduce heat to low, and cook gently for 2.5 hours. Turn the shanks occasionally to ensure even cooking. The meat should begin to loosen from the bone.
09 - Stir in the yogurt, fresh chopped tomatoes, and green chili if using. Simmer uncovered for another 45-60 minutes, until the lamb is very tender and falling off the bone, and the sauce has thickened nicely.
10 - Skim any excess fat from the surface if desired. Taste the sauce and adjust seasoning with additional salt if needed.
11 - Transfer to serving platter, garnish generously with fresh chopped cilantro, and serve with lemon wedges on the side.