Actually, this engine is depth 1 with the most monstrous class for move generation I have ever written (yet).
It passes all perft test (with small depth, but it seems to be complete).
The Engine runner uses 2 parallel threads, one for user input and the other one for engine evaluation (depth 1 btw 💀).
UCI command are parsed with custom UCI Serializer. Upon successful parsing, the runner sends request to the handler (implementation).
Moves are generated using Mailbox board representation. move generator
Board is evaluated with piece-type score. evaluator
Board functionality is split across interfaces (I love SOLID). Whole abstraction is stored in Habot.Core. The implementation seem to be some kind of inheritance hell, but at least it is single responsibility principle :).