Problem
A recipe-run selected a loopback port already held by an existing SSH listener. Playground emitted listen EADDRINUSE, but the run remained blocked in input.materialize until the outer 20-minute timeout sent SIGTERM. The managed disposable MySQL container remained running and required operator cleanup.
Evidence
- Bind error:
listen EADDRINUSE: address already in use 127.0.0.1:63055.
- The pre-existing owner was an SSH listener with PPID 1, started roughly 14 hours before the recipe run.
- Artifact pointer remained at
lastCommand: input.materialize and recorded interruption by SIGTERM only when the outer timeout expired.
- The managed
wp-codebox-mysql-* container remained up after termination.
Expected
- Dynamic Playground port allocation excludes ports that cannot be bound, or retries allocation on
EADDRINUSE.
- Runtime startup/materialization propagates the bind failure immediately instead of hanging.
- Managed runtime services are torn down on this terminal startup failure and SIGTERM path.
Reproduction
- Hold a local TCP listener on a candidate Playground bind port.
- Force or stub dynamic allocation to return that occupied port.
- Run a recipe with a managed service and an input mount requiring materialization.
- Assert the run fails promptly with structured bind diagnostics and the managed service lifecycle reaches
released/teardown: completed.
Discovered while validating #1821 against a real mounted WPCOM PHPUnit recipe.
Problem
A
recipe-runselected a loopback port already held by an existing SSH listener. Playground emittedlisten EADDRINUSE, but the run remained blocked ininput.materializeuntil the outer 20-minute timeout sent SIGTERM. The managed disposable MySQL container remained running and required operator cleanup.Evidence
listen EADDRINUSE: address already in use 127.0.0.1:63055.lastCommand: input.materializeand recorded interruption by SIGTERM only when the outer timeout expired.wp-codebox-mysql-*container remained up after termination.Expected
EADDRINUSE.Reproduction
released/teardown: completed.Discovered while validating #1821 against a real mounted WPCOM PHPUnit recipe.