Pat the lamb dry and season generously with salt and black pepper.
Heat the oil in a large skillet over medium-high until shimmering. Sear the lamb in batches 2–3 minutes per side until well browned. Transfer to a plate and repeat with remaining lamb.
Lower heat to medium. Add the onion and cook 3–4 minutes until translucent and lightly golden, scraping up browned bits.
Stir in garlic, ginger, and fresh chili; cook 30–60 seconds until fragrant.
Add tomato paste, chili flakes, cumin, coriander, smoked paprika, and cinnamon. Cook 1–2 minutes, stirring, until the paste darkens and smells toasty.
Add crushed tomatoes and stock; stir, then return lamb and any accumulated juices. Reduce heat to medium-low and simmer 8–12 minutes for cubed lamb or 5–7 minutes for ground lamb, until just tender and sauce thickens.
Off the heat, stir in the yogurt to make the sauce silky. If needed, return to low heat for 30 seconds to warm through without boiling.
Stir in butter or ghee and lemon juice. Taste and adjust salt, lemon, or chili flakes as desired.
Serve over rice or with flatbreads. Garnish with fresh herbs, sliced red onion, and an optional dollop of yogurt.