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. Add lamb shanks and sear 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 sliced onions. Sauté over medium heat, stirring occasionally, until golden brown and caramelized, about 10 minutes.
04 - Add minced garlic and grated ginger to the onions. Cook for 1-2 minutes, stirring constantly, until fragrant and raw aroma dissipates.
05 - Stir in ground coriander, cumin, garam masala, turmeric, chili powder, black pepper, bay leaves, whole cloves, cardamom pods, and cinnamon stick. Toast spices for 1 minute, stirring constantly to prevent burning.
06 - Add canned chopped tomatoes to the pot. Cook for 5 minutes, stirring occasionally, until tomatoes break down and release their juices, forming a thick base.
07 - Return browned lamb shanks to the pot. Pour in lamb or beef stock and bring to a gentle simmer. Cover with tight-fitting lid, reduce heat to low, and cook for 2.5 hours. Turn shanks every 30 minutes to ensure even cooking.
08 - Remove lid and stir in plain yogurt, fresh chopped tomatoes, and sliced green chili if using. Simmer uncovered for 45-60 minutes, until lamb is fall-off-the-bone tender and sauce has thickened considerably.
09 - Skim any excess fat from the surface. Taste and adjust seasoning with additional salt if needed. Garnish generously with fresh chopped cilantro and serve with lemon wedges alongside steamed basmati rice or naan bread.