Problem
Orchestration commands that spawn nested DevTools processes can fail in non-interactive contexts because a subprocess path still assumes an attached terminal and ends up trying to open /dev/tty.
In this environment, the failure shows up on commands such as:
composer dev-tools reports -- --cache-dir=/tmp/...
composer dev-tools standards -- --cache-dir=/tmp/...
composer dev-tools:fix
The concrete error is:
proc_open(/dev/tty): Failed to open stream: Device not configured
Direct commands such as tests, docs, wiki, and phpdoc still run successfully on their own. The problem appears when aggregate commands orchestrate nested subprocesses.
Why This Matters
This makes aggregate workflows less reliable in CI-like or non-interactive environments and complicates validation of otherwise-correct command behavior. It also means dev-tools:fix can fail for environmental reasons unrelated to the command logic being exercised.
Suspected Scope
The problem appears to be in the subprocess/orchestration layer rather than in individual tool integrations.
Potential areas to inspect:
- process construction and queue execution for nested commands
- Composer script /
php bin/dev-tools invocation paths used by aggregate commands
- any TTY auto-detection or explicit TTY wiring in the process builder / queue stack
- command paths that derive terminal behavior from output style or interactivity assumptions
Expected Behavior
Aggregate commands should be able to run nested commands without requiring /dev/tty to be available.
In practice:
reports should run docs, tests, and metrics in non-interactive contexts
standards should run nested quality commands in non-interactive contexts
dev-tools:fix should not fail just because no TTY device is attached
Acceptance Criteria
Problem
Orchestration commands that spawn nested DevTools processes can fail in non-interactive contexts because a subprocess path still assumes an attached terminal and ends up trying to open
/dev/tty.In this environment, the failure shows up on commands such as:
composer dev-tools reports -- --cache-dir=/tmp/...composer dev-tools standards -- --cache-dir=/tmp/...composer dev-tools:fixThe concrete error is:
Direct commands such as
tests,docs,wiki, andphpdocstill run successfully on their own. The problem appears when aggregate commands orchestrate nested subprocesses.Why This Matters
This makes aggregate workflows less reliable in CI-like or non-interactive environments and complicates validation of otherwise-correct command behavior. It also means
dev-tools:fixcan fail for environmental reasons unrelated to the command logic being exercised.Suspected Scope
The problem appears to be in the subprocess/orchestration layer rather than in individual tool integrations.
Potential areas to inspect:
php bin/dev-toolsinvocation paths used by aggregate commandsExpected Behavior
Aggregate commands should be able to run nested commands without requiring
/dev/ttyto be available.In practice:
reportsshould rundocs,tests, andmetricsin non-interactive contextsstandardsshould run nested quality commands in non-interactive contextsdev-tools:fixshould not fail just because no TTY device is attachedAcceptance Criteria
/dev/ttyfailure deterministically in a non-interactive context.reports,standards, anddev-tools:fixrun in the affected context after the fix.