Code coverage is not enough with the assumptions. You have to do a logical coverage, meaning check that all combinations of logical conditions are covered. Since `if x:` is covered whether `x` is true or false, and `if x or y:` is covered even if `y` is never evaluated, you need to do more (`if x or y` needs to check four combinations of `x` and `y` being true and false; for the assumptions, we should be checking all combinations of `True`, `False`, and `None`). 

This is actually pretty a typical feature of more robust coverage tools, for instance, coverage of mission critical code like the code that runs in an airplane. I wonder if Python has any more advanced coverage tools, or if `coverage` has the option to do this sort of thing.