From the adversarial review (2026-08-04). For a panicking case, the one line that says why (the panic message with file:line) is not in the case result:
- The runner builds stores with
inherit_stderr (crates/component-test-runner/src/lib.rs), so guest panic payloads go to raw process stderr.
- The recorded detail is only
trap: wasm trap: wasm 'unreachable' instruction executed (trap_detail); in JSONL mode the panic message is absent from the stream entirely.
- Under
--jobs N, worker stderr interleaves arbitrarily — at conformance-suite scale (M1: ~8k cases) correlating a panic message to its case is impossible. Observed even at fixture scale: the panic line interleaved into a different case's output.
Proposed: per-case stderr capture (WasiCtxBuilder::stderr with an in-memory pipe), appended to the trapping case's diagnostics (or last-N-lines folded into detail, keeping the one-line convention for detail itself). This is runner policy (L3), not contract. Consider the same for the composed runner once it shares the results encoder (#34).
Note: expected/verify-embed-fixture.txt and the fixture JSONL golden will need regeneration when this lands.
From the adversarial review (2026-08-04). For a panicking case, the one line that says why (the panic message with file:line) is not in the case result:
inherit_stderr(crates/component-test-runner/src/lib.rs), so guest panic payloads go to raw process stderr.trap: wasm trap: wasm 'unreachable' instruction executed(trap_detail); in JSONL mode the panic message is absent from the stream entirely.--jobs N, worker stderr interleaves arbitrarily — at conformance-suite scale (M1: ~8k cases) correlating a panic message to its case is impossible. Observed even at fixture scale: the panic line interleaved into a different case's output.Proposed: per-case stderr capture (
WasiCtxBuilder::stderrwith an in-memory pipe), appended to the trapping case'sdiagnostics(or last-N-lines folded intodetail, keeping the one-line convention fordetailitself). This is runner policy (L3), not contract. Consider the same for the composed runner once it shares the results encoder (#34).Note:
expected/verify-embed-fixture.txtand the fixture JSONL golden will need regeneration when this lands.