I call this rev the "Big Little Lie" in honor of
Liane Moriarty, the author of a book by that name. I am now reading another of her books,
Here One Moment, for the fourth time.
The Big Little Lie annotates p.v as a VNode, not as VNode | None. Why would I do that, you ask?
My reasoning is straightforward. Leo already raises ValueError in those few places where it's imperative to fail fast, before data might be corrupted. But in all other cases, mypy pedantically wants the code to assert p.v in places where Leo would immediately raise AttributeError if p.v were None. These useless assertions pollute Leo's code to no purpose. I shall soon remove them from PR #4812.
All your comments, questions, and suggestions are welcome.
Edward