I have a single wrap function that does this for all errors. The top level handler only prints the first two, but can print all if needed.
I have never had difficulty quickly finding the error given only the top two stack sites.
Any complaint about go boilerplate is flawed. The purpose and value is not in reducing code written, it is to make code easier to read and it achieves this goal better than any other language.
This value is compounding with coding agents.