- Request-scoped parameters like user ID, request ID, etc.
- Dependency injection (database connection and other IO)
- Cancellation
It works great. The one hairy part is when you need to change the context, for example when logging in you take an anonymous context and end up with a logged-in context. We use linters to ensure that stuff is right, but it still takes some thought in the edge cases.
Still, I think those issues are exposing problems in our codebase rather than problems with typed contexts.