#421 · bluetape4k-projects · tenant context
Compare four tenant carriers by the value a caller can read, the scope that owns it, and what survives a boundary.
Carrier
Choose a carrier and replay six scenarios: what is visible, who owns it, and what remains after the boundary.
This carrier instance owns the binding on the current thread.
Keyboard: tab to a step and press Enter to inspect it.
Compare the ownership contract
Compare four tenant carriers by the value a caller can read, the scope that owns it, and what survives a boundary.
This carrier instance owns the binding on the current thread.
The lexical ScopedValue carrier owns the binding.
Each subscriber owns an immutable Context chain.
The ApplicationCall attributes own the binding.
Caller responsibilities
No carrier invents a tenant.
A dispatcher or suspend hop has no automatic propagation.
StructuredTaskScope.fork inherits; an independent virtual thread and coroutine bridge do not.
Scheduler work stays in the chain; hooks and coroutine bridges are not implied.
A new call is unbound; pass the call explicitly across a dispatcher.
After the boundary: Authentication, authorization, tenant resolution, and business-effect safety remain caller-owned.
Pinned source
5954b6329a3e11c70ef12b6d4bd8480e7b38be1b