Two Group 5 release-CI fixes for the py3.13 freeze-at-98% (run 31235996603,
both retry attempts):
- tests/conftest.py: arm faulthandler.dump_traceback_later(120s, exit=True)
around each test. pytest-timeout's thread method (timeout=90) needs the GIL
to fire, so a C-level hang that holds the GIL freezes the worker silently
until the 50-min step wall; faulthandler's C watchdog needs no GIL, dumps
every thread's stack, and hard-exits the worker so xdist replaces it and
--reruns retries the test. The stderr fd is dup'd at pytest_configure time
because pytest's fd-level capture otherwise swallows the dump (which is why
the 3.12 thread dumps never reached CI logs). LANGFLOW_TEST_HARD_TIMEOUT=0
disables it for debugger sessions.
- tests/unit/test_logger.py: module-scoped autouse fixture restoring the
process-global logging state the module rewires (structlog config, root
handlers/level, named-logger levels, lfx file-handler global). In every
observed freeze the wedged worker had just finished this module and hung in
its next full-app test (test_login.py::
test_session_endpoint_rejects_expired_external_token).