▲Great survey. One thing I'd push further on your principle 2.3: the reason .context() chains work better than stack traces isn't just ergonomics, it's that they preserve causal information rather than mechanical information. A stack trace tells you which functions were on the call stack. A context chain tells you what the program was trying to do. These are fundamentally different things, and the gap widens dramatically with async code, where the mechanical stack is often meaningless.
reply▲Great point — the causal vs mechanical distinction is a cleaner way to put it than what I wrote. Context chains preserve application-specific, causal information about what you were trying to do. Stack traces just tell you where code happened to be executing. That gap gets huge with async, where the mechanical stack is basically noise.
reply