Clearly sane. Inscrutable errors lurk in several more places as well, namely in the resolution process. In general the code was written in a way that favors None propagation over exception raising and though this made looping through several strategies for resolving, building, etc clean - it makes the case where all strategies fail produce incomprehensible / terse errors too far from the source.