01 - Pat the lamb shanks thoroughly dry with paper towels and season generously with salt and black pepper on all sides.
02 - Heat vegetable oil in a large heavy-based pot or Dutch oven over medium-high heat. Sear the lamb shanks on all sides until deeply browned, approximately 3-4 minutes per side. Remove shanks and set aside on a plate.
03 - In the same pot, add the sliced onions. Sauté over medium heat, stirring occasionally, until golden brown and caramelized, about 10 minutes.
04 - Add the minced garlic and grated ginger to the caramelized onions. Cook for 1-2 minutes, stirring constantly, until fragrant and raw garlic aroma dissipates.
05 - Stir in all ground spices (coriander, cumin, garam masala, turmeric, chili powder, black pepper) plus whole spices (bay leaves, cloves, cardamom pods, cinnamon stick). Toast for 1 minute, stirring constantly to prevent burning.
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 base.
07 - Return the seared lamb shanks to the pot, nestling them into the spice mixture. Pour in the lamb or beef stock and bring to a gentle simmer.
08 - Cover pot with a tight-fitting lid. Reduce heat to low and cook gently for 2.5 hours, turning the shanks every 30 minutes to ensure even cooking.
09 - Remove lid and stir in the plain yogurt, fresh chopped tomatoes, and sliced green chili. Simmer uncovered for 45-60 minutes, stirring occasionally, until lamb is fall-off-the-bone tender and sauce has thickened considerably.
10 - Skim any excess fat from the surface. Taste and adjust seasoning with additional salt if needed. Serve garnished generously with fresh chopped cilantro and lemon wedges on the side.