In a hypothetical Java import tool, a low-level failure is caught and replaced with new ImportFailure("Import failed"). The diagnostic log now contains only that short message. The caller should not receive local file details, but the person investigating the failure still needs a causal explanation.
I would keep the domain exception and have its constructor pass the original failure to Throwable as the cause. Java provides that causal link without requiring the public exception category to become the lower-level category.
The public response can then use the domain category and a deliberately chosen message. It should not obtain its wording from getCause().getMessage(). The cause may contain precisely the local details we wanted to keep out of that response. Internal diagnostics also need controlled handling, rather than an instruction to print every exception value.
The tradeoff is that richer diagnostic information needs access and redaction rules. Discarding the cause avoids handling that information but leaves a weaker explanation of the failure.
What should the diagnostic path retain so that a failed import can be investigated, while the caller receives only information useful for its next action?