There is a race condition between the tail process and the compute function execution.
Switching to use the dagster cli machinery (in order to have the same execution path for both
posix and windows) slowed down the tail process enough that a lot of quickly executing solids
were completing and killing the tail process before their output was mirrored.
The threshold on my machine to consistently mirror output was a couple hundred milliseconds.
This diff bypasses the python cli machinery in favor of the bare UNIX tail process. This is
the approach used in 0.6.1, and that we moved away from in https://dagster.phacility.com/D1258.
We maintain the polling behavior for windows, incurring a latency cost
Tracking issue for replacing this with a less-bespoke solution for process management: https://github.com/dagster-io/dagster/issues/1906