Take the soya chaap off of the sticks and cut into 1-inch pieces. Heat a pot or large saucepan with about an inch of oil. I ended up using about half a cup. Fry the chaap until golden brown and slightly crisp on all sides, which should take about 10 minutes.
Marinate the soya chaap in yogurt, red chili powder, turmeric, chaat masala, and salt. Combine and let it sit until you're ready to use it.
To prepare for making the soya chaap masala, finely chop 1 red onion. Process the other onion with all the ginger and garlic to form a coarse paste. Process the roma tomatoes separately for the tomato puree.
Heat oil in either the same pot/saucepan or a different one over medium heat. Add a little vegan butter. When it's hot, bloom the whole spices: bay leaves, cinnamon, cloves, cumin seeds, black cardamom, and green cardamom until they begin to release their aromas.
Add the chopped onions and stir until translucent and slightly golden, so about 4-5 minutes. Add the onion-ginger-garlic paste and cook for another 4-5 minutes. Add the tomato puree and a big pinch of salt. Increase heat to medium-high and allow the tomato juices to mostly evaporate, which usually takes 6-8 minutes.
At this point, everything should be well-combined with one another. Add the slit green chilis, ground coriander, and kashmiri chili powder. Combine the spices with the gravy for a minute. Then add about 1 cup of water. Cover and simmer until it is at the texture you prefer. Add more water if necessary.
Finish with garam masala, kasoori methi, and salt to taste. Add the marinated soya chaap and simmer for another 10 minutes. Cover to maintain the texture of the gravy.