ShaderBuildReportSink
A report store as a holder on another thread keeps it.
In the namespace construct::shader. Declared in src/libs/libconstruct/construct/shader/ShaderBuildReport.hpp.
Detailed description
The render worker, the forge's build threads and the SDF layer publish into the store of a document that the GUI thread can close at any moment. With a plain pointer they published into a freed store: on lavapipe the worker then waited forever on the freed store's mutex, and the shell's destructor waited forever on the worker (testConstructShellLifecycle under the ci profile, cleanupTestCase, 2026-10-16). A sink publishes while its store lives and into nothing after: the store's destructor waits for a publish in progress, then cuts the link.
Copyable and cheap. A default sink publishes nothing.