Or is it a "kind of context variable that is shared among threads?" That was more the direction my mind was going.
Context variables that hold explicitly or implicitly immutable values are safe to share. Context variables that hold values intended to be mutated: seldom.
What if it were some kind of ContextVar subclass or flag where you would say you did or didn't want something shared?
And for legacy modules like decimal, you could turn on the flag somehow to get the sharing behaviour.
Sometimes threads are made by third-party libraries and those libraries don't know anything about the context.
In my case, the pattern was:
1. my code set context variable
2. my code configured a third party library with a callback
3. the third party library used threading for perf reasons
4. it called my callback, which failed due to the context variable failing to be inherited
I believe (after only thinking about it for a day or so) that one can generally determine the right "sharing rule" at the point of definition of a ContextVar, based on the semantics and type of the Var.