I'm surprised that trinary logic has not become a standard part of standard libraries yet. Almost every project I have worked on ends up with some form of a yes/no/maybe abstraction.
Yes/No/Maybe is a good fit for an enum because “Maybe” carries some specific information.
For more common situations where the yes/no bool is not available yet or should not be considered, constructs like Rust’s Option<bool> are a very good fit. Layering the bool inside of an Option creates intentional handling about the presence or lack of value first before you can work with it.
With privacy coming back into vogue, it’s useful to distinguish “we didn’t ask” from “they wouldn’t answer”
For some vector logic the distinction could matter.