I wrote up the approach I used at https://clace.io/blog/errors/, started a discussion at https://news.ycombinator.com/item?id=42370488 since it could apply outside of Starlark also