Heat 2 tablespoons of oil in a large deep skillet or Dutch oven over medium heat. Add the finely diced onion and cook, stirring occasionally, for 7 to 8 minutes until soft, translucent, and lightly golden at the edges.
Add the minced garlic, grated ginger, and chopped green chili (if using) to the pan. Cook for 1 to 2 minutes, stirring constantly, until fragrant and toasty.
Add the ground cumin, coriander, turmeric, half the garam masala (1/2 teaspoon), and chili powder. Stir well to coat the onion mixture and cook for 1 to 2 minutes until the spices deepen in colour and smell richly fragrant.
Stir in the tomato paste and cook for 1 minute, then pour in the canned tomatoes. Season with 1 teaspoon of salt and 1/2 teaspoon of black pepper, and simmer for 5 minutes until the sauce thickens slightly and oil begins to separate around the edges.
Add both drained cans of chickpeas, the full-fat coconut milk, and vegetable stock, then stir to combine. Bring to a bubbling simmer and cook uncovered over medium-low heat for 10 minutes, stirring occasionally, until the sauce reduces and thickens to your liking.
Add the chopped baby spinach in two or three batches, stirring between each addition. Allow it to wilt into the curry over 2 to 3 minutes.
Stir in the remaining 1/2 teaspoon of garam masala and the lemon juice. Taste and adjust salt, lemon, or chili to your preference, then remove from the heat.
Garnish generously with fresh cilantro and serve over fluffy basmati rice or alongside warm naan bread.