Quiescence search has been added. Once we reach a depth of 0 during the alpha beta search, we make a search further looking only at captures moves. This way, the final positions that get evaluated contain no captures moves, which means that positions that could lead to loss of material on next turn due to opponent capture are evaluated as bad positions. This additional search better represents the value of a position.
The engine runs much slower with it though in positions with lots of captures, so need for move generation optimizations
Quiescence search was slower because my move ordering implementation was wrong. I would sort all moves before starting the alpha beta search, which is bad because you sort in moves which alpha beta would have pruned, hence ending up searching more positions than you should. This article explained the sort then pick approach, which makes more sense when using alpha beta pruning.
Implementing this, the full search with quiescence goes from searching ~300,000,000(!) positions to ~200k.