Wrapping an error in a more meaningful one used to discard the original, or required a non-standard property that nothing displayed.
try {
await api.charge(order)
} catch (e) {
throw new Error(`Charge failed for order ${order.id}`, { cause: e })
}
// and the reader
console.error(err.message)
console.error('caused by:', err.cause)
// Node and the browsers print the chain automatically;
// most error trackers did not, for the first year.
The tracker support lagging is the practical caveat — the value is standard and whether it reaches an incident dashboard depends on the SDK version. Attaching the cause costs nothing either way and means the information exists when the tooling catches up, which is a better position than a custom property nobody parses.