Inconsistent artifact propagation on catch
When the catch decorator captures an exception, if the exception happened within the user code, any artifact that has been set prior to the exception is persisted in the datastore and is therefore accessible for later steps. So, for example:
self.foo = 42
assert 1 == 0
self.bar = 43
would result in foo being accessible (but not bar).
If the exception happens after the user code though (so in the Metaflow runtime), nothing is accessible which is somewhat inconsistent. Although no guarantee is made, we could do a better job being more consistent/logical about it.
It's not just the error in Metaflow runtime - if the container crashes during user code execution, the artifacts are still not going to be persisted (while the flow moves on to the next step). I don't think we can provide a stronger guarantee than what exists today.