Problem
When tests/playground-phpunit-bootstrap-failure.integration.test.ts receives a failed recipe-run process with empty stdout, its catch path calls JSON.parse(""). That replaces the original CLI process failure with SyntaxError: Unexpected end of JSON input, hiding stderr, exit status, timeout, and command context needed to diagnose the runtime failure.
This occurred in the full smoke aggregate while verifying #2464 and #2466. The test passes standalone, so preserving the original failure is required to diagnose any recurrence under aggregate load.
Desired outcome
Parse recipe-run output only when non-empty JSON exists. Return structured failed recipe output when available; otherwise rethrow the original process error unchanged.
Acceptance criteria
- Empty or absent stdout does not enter
JSON.parse.
- Structured recipe failure JSON remains the primary assertion input.
- Unstructured process failures retain their original diagnostics.
- The standalone integration and full smoke aggregate pass.
AI assistance
GPT-5.6 Sol via OpenCode identified the masking parser after the aggregate failure and drafted this diagnostic repair under Chris Huber's direction.
Problem
When
tests/playground-phpunit-bootstrap-failure.integration.test.tsreceives a failed recipe-run process with empty stdout, its catch path callsJSON.parse(""). That replaces the original CLI process failure withSyntaxError: Unexpected end of JSON input, hiding stderr, exit status, timeout, and command context needed to diagnose the runtime failure.This occurred in the full smoke aggregate while verifying #2464 and #2466. The test passes standalone, so preserving the original failure is required to diagnose any recurrence under aggregate load.
Desired outcome
Parse recipe-run output only when non-empty JSON exists. Return structured failed recipe output when available; otherwise rethrow the original process error unchanged.
Acceptance criteria
JSON.parse.AI assistance
GPT-5.6 Sol via OpenCode identified the masking parser after the aggregate failure and drafted this diagnostic repair under Chris Huber's direction.