Microsoft's documentation for nullable reference types explains that the nullable context is a cross-product of two independent binary distinctions: The nullable annotation context can be enabled or disabled, and the nullable warning context can be enabled or disabled. But I am having trouble understanding why one might have one nullable context enabled and the other disabled.
My best explanation is that this tracks a producer-consumer distinction. That is, an enabled annotation context in X allows Y, which uses X, to have meaningful warnings in Y's enabled warning context. Or differently stated, I should enable annotation contexts if I want to improve the warnings for a user of my code (whether that is me in another part of my own code or a separate person using a library that I have created), and I should enable warning contexts if I want to make sure that I am making appropriate checks on code created by others, whether or not that code is properly annotated. Ideally, of course, one probably ought to do both, but one might prioritize one or the other.
Is that the right way to think about it?