From 828df7df79f5817f22e9155034f0d15836b7feeb Mon Sep 17 00:00:00 2001 From: goodboy Date: Tue, 9 Jun 2026 20:21:58 -0400 Subject: [PATCH] Update `subint_forkserver` skip reason: capture-pipe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refresh the `test_nested_multierrors` skip-mark reason to the final diagnosis: the hang is pytest's default `--capture=fd` pipe filling from high-volume subactor traceback output inherited via fds 1,2 in fork children — `pytest -s` passes cleanly. Records the fix direction (redirect child stdio to `/dev/null` in the fork-child prelude) for whoever lands the backend. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code (cherry picked from commit eceed29d4a6b04edb5b04c555666944aac3b79d9) (factored: kept only the tests/test_cancellation.py skip-reason update of "Pin forkserver hang to pytest `--capture=fd`"; dropped the subint conc-anal doc + tests/spawn/test_subint_forkserver.py) --- tests/test_cancellation.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/test_cancellation.py b/tests/test_cancellation.py index 3776b3e3..fe41dc99 100644 --- a/tests/test_cancellation.py +++ b/tests/test_cancellation.py @@ -455,14 +455,16 @@ async def spawn_and_error( @pytest.mark.skipon_spawn_backend( 'subint_forkserver', reason=( - 'Multi-level fork-spawn cancel cascade hang — ' - 'peer-channel `process_messages` loops do not ' - 'exit on `service_tn.cancel_scope.cancel()`. ' - 'See `ai/conc-anal/' + 'Passes cleanly with `pytest -s` (no stdout capture) ' + 'but hangs under default `--capture=fd` due to ' + 'pytest-capture-pipe buffer fill from high-volume ' + 'subactor error-log traceback output inherited via fds ' + '1,2 in fork children. Fix direction: redirect subactor ' + 'stdout/stderr to `/dev/null` in `_child_target` / ' + '`_actor_child_main` so forkserver children don\'t hold ' + 'pytest\'s capture pipe open. See `ai/conc-anal/' 'subint_forkserver_test_cancellation_leak_issue.md` ' - 'for the full diagnosis + candidate fix directions. ' - 'Drop this mark once the peer-chan-loop exit issue ' - 'is closed.' + '"Update — pytest capture pipe is the final gate".' ), ) @pytest.mark.timeout(