The current error-per-workspace approach means that the "core module" in the workspace has a ton of dependencies (some behind flags, some not) and is very heavy-weight. This is because we have to add the From impls into the core module.
By the time an error reaches the top-level HTTP handler, it could be one of many different types of errors. It's pretty much impossible to assign an HTTP error code correctly.
Sometimes we get things like LanceDBError(DataFusionError(LanceDBError(...))) and there end up being many layers of wrapping.
There's a lot of situations where we don't have backtraces or just the location. We can do better now.
We have a lot of errors that don't have context added to them. This makes it hard to debug.