There is one inside execute.  

What I was worried about is if, somehow, now or down the road you asked for a context, did something that generated an error or warning -- but never actually executed the shader.  Those errors would just get lost.  Or would just linger in the context until you requested another context later, got this one, and executed again.

I figured that if I also flushed again when you return the context to the SS, that would catch anything weird like that.

The usual pattern is ask for context, run shader (or do something else with the context?), return the context.  

It's a thread-specific holding area for returned contexts, so there is no real cost to requesting a context for each shader invocation and immediately returning it to the pool. You'll just keep getting the same one, and it doesn't even need to lock.