StreamToRunner pushed buf[:n] onto a buffered channel drained by a separate goroutine, so the next Read overwrote chunks that had not been marshaled yet. Copy each chunk before sending.
Also log at the two points where the engine hands a failure back to the spindle, so it is clear from controller logs which side declared the failure, and pin the controller to Longhorn v2-capable nodes.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com