01 - Pat the lamb shanks thoroughly dry with paper towels. Generously season all sides with salt and black pepper.
02 - Heat vegetable oil in a large heavy-based pot or Dutch oven over medium-high heat. Add lamb shanks and sear on all sides until deeply browned, approximately 3-4 minutes per side. Remove shanks from pot and set aside on a plate.
03 - Add sliced onions to the same pot. Sauté over medium heat, stirring occasionally, until golden brown and caramelized, about 10 minutes.
04 - Stir in minced garlic and grated ginger. Cook for 1-2 minutes until fragrant, stirring constantly to prevent burning.
05 - Add all ground spices (coriander, cumin, garam masala, turmeric, chili powder) and whole spices (bay leaves, cloves, cardamom pods, cinnamon stick). Toast for 1 minute, stirring continuously to release essential oils.
06 - Add chopped canned tomatoes. Cook for 5 minutes, stirring occasionally, until tomatoes break down and release their juices.
07 - Return seared lamb shanks to the pot. Pour in stock and bring to a gentle simmer. Cover with tight-fitting lid, reduce heat to low, and cook for 2 ½ hours. Turn shanks every 30-40 minutes to ensure even cooking.
08 - Remove lid and stir in yogurt, fresh chopped tomatoes, and sliced green chili if using. Simmer uncovered for 45-60 minutes, until lamb is fork-tender and sauce has thickened considerably.
09 - Skim excess fat from surface if desired. Taste sauce and adjust salt seasoning as needed.
10 - Transfer lamb shanks to serving platter. Spoon thickened sauce over meat. Garnish generously with chopped fresh cilantro and accompany with lemon wedges.