glMakeTextureHandleResidentARB is per-context?

Reading the spec here, it appears that glMakeTextureHandleResidentARB is supposed to act on a per-context basis, but in real usage I have not seen any problems using the same handle across multiple OpenGL contexts, once MakeTextureHandleResident() is called once:
https://registry.khronos.org/OpenGL/extensions/ARB/ARB_bindless_texture.txt

Requiring every texture handle to be bound for every context seems like it would be extremely difficult to work with in multi-context applications. Am I misunderstanding something here or are the driver implementations just being very lenient?

The specification seems pretty clear:

That depends on what you’re using multiple contexts for. Broadly speaking, multiple contexts are used for threaded operations, but you can only really reliably render from one thread/context. As long as it is made resident in that context, you’re fine. And the handle/address will be the same across all contexts:

I am using multiple contexts for multiple viewports in a windowed application, as well as for recreation of the game window when the user changes the screen resolution.

Does this mean that as long as wglShareLists() is called, a texture handle can be used across multiple contexts, so long as it is made resident in one? Or does it mean that the handle must be made resident in each context it is used?

A handle being valid does not mean it can be used. The first quote is about where the handle can be used by GPU processes; the second is about validity.

What it’s saying is that you can get the handle from any context and it will be the same handle, but you cannot execute a GPU process that uses the handle unless its resident in that context.

I am using multiple contexts for multiple viewports in a windowed application, as well as for recreation of the game window when the user changes the screen resolution.

Oh. Well, then you’re going to have to farm out handle residency to all of the contexts.

So in other words:

  1. glMakeTextureHandleResidentARB() must be called for each context a bindless texture handle is used in, or the result is undefined.
  2. If glMakeTextureHandleResidentARB() has been called for this context, the same bindless texture handle retrieved in another context may be used in this context.
  3. The bindless texture handles are context-agnostic, but their residency status is not.

Is that correct?