`runExec` currently merges `stdout` and `stderr` into the same `PassThrough` stream: https://github.com/nextcloud-libraries/nextcloud-e2e-test-server/blob/780218412e57bd774393a409e65f9d8b3ded7f5f/lib/docker.ts#L411 Ideally we separate them. This would allow us to capture error output - e.g. from `occ` - separately when we care about it. Then we could make some scenarios like the docker-modem workaround in `runOcc` more robust: https://github.com/nextcloud-libraries/nextcloud-e2e-test-server/blob/780218412e57bd774393a409e65f9d8b3ded7f5f/lib/docker.ts#L259-L262 e.g.: ```typescript const { stdout, stderr } = await runOcc(['app:list', '--output', 'json'], { container }) if (stderr.trim()) { console.warn(`├─ occ stderr: ${stderr.trim()}`) } // Strip any residual binary header bytes from stdout only (docker-modem demuxing bug) const cleaned = stdout.replace(/^[\x00-\x08\x0e-\x1f]+/, '') const applist = JSON.parse(cleaned) ```
Activity
joshtrichards commentedon Mar 17, 2026
Related upstream fix for the demux bug: apocas/docker-modem#195