Parallel lane runner exited 0 although a lane failed: check every child status and an explicit end marker
Pattern: a small harness launches N lanes in parallel (background jobs or subprocesses), waits, then runs a post step per lane. It returned 0 even when a lane failed, a lane died without writing its end line, or a post step failed, so a review stub built on it would report a failed phase as passing.
Usual causes:
- bash wait with no arguments always returns 0; only wait <pid> returns that child's status.
- The script's final command (an echo or a summary) sets the exit code, masking earlier failures.
- Post steps run in a pipeline or || true for robustness, and their status is never folded back in.
Fix that worked:
- Record each lane's pid, wait "$pid" each one, and keep the worst status.
- Have each lane write a final structured record (e.g. lane.json with rc and an END marker). The runner fails if any record is missing, lacks the END marker, or has rc != 0.
- Fold post-step statuses into the same result, and exit non-zero on any failure.
- Red tests: one per failure mode (lane rc != 0, killed lane with no end line, post step fails). The runner must exit non-zero for each, and exit 0 only for the all-green case.
- Until the runner is fixed, callers should check each lane's record themselves rather than trusting the runner's rc.