Thoughts
This is a hot take, but I think that Zig's `try` is a bad idea. I at least jump to it when I mean "this is out of scope for this function
to handle"—but if it's out of scope, you should panic, either with `std.debug.panic` or `unreachable` (if `unreachable` is applicable to your application).
If your application needs to handle it, I think at every level you should catch and throw a new error. Zig will unwind throw-stacks (I forget what it's called), so it only gives you more information. The idea of a function that uses `try` but only propagates errors created lower down in the call stack, e.g. returns `void!`, I think is a naive simplification, and in most real applications (especially those with Zig's design goals of correctness) you should be forced to catch and re-throw.