01 - Pat the lamb shanks thoroughly dry with paper towels and season generously with salt and pepper on all sides.
02 - Heat the 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 from pot and set aside.
03 - Add the sliced onions to the same pot and sauté until golden brown and caramelized, about 10 minutes. Stir occasionally to prevent burning.
04 - Stir in the minced garlic and grated ginger. Cook for 1-2 minutes until fragrant, being careful not to burn the garlic.
05 - Add all ground spices (coriander, cumin, garam masala, turmeric, chili powder, black pepper) and 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 and cook for 5 minutes, allowing them to break down and release their juices, creating a thick base.
07 - Return the seared lamb shanks to the pot. Pour in the stock and bring to a gentle simmer. Cover with a tight-fitting lid, reduce heat to low, and cook for 2.5 hours, turning the shanks occasionally.
08 - Stir in the yogurt, fresh chopped tomatoes, and green chili. Simmer uncovered for 45-60 minutes until the lamb is fork-tender and falling off the bone, and the sauce has thickened to desired consistency.
09 - Skim any excess fat from the surface. Taste and adjust seasoning with additional salt if needed. Garnish generously with fresh cilantro and serve with lemon wedges alongside steamed basmati rice or naan.