============================= test session starts ==============================
platform linux -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0 -- /home/ark/dev/aw8s/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /home/ark/dev/aw8s
configfile: pyproject.toml
plugins: anyio-4.12.1, asyncio-1.3.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 39 items

tests/test_logs.py::TestLogViewAppendLines::test_append_lines_stores_and_writes PASSED [  2%]
tests/test_logs.py::TestLogViewSetLogs::test_set_logs_bulk PASSED        [  5%]
tests/test_logs.py::TestLogViewFollowToggle::test_f_toggles_follow PASSED [  7%]
tests/test_logs.py::TestLogViewFollowToggle::test_follow_controls_auto_scroll PASSED [ 10%]
tests/test_logs.py::TestLogViewClear::test_clear_logs PASSED             [ 12%]
tests/test_logs.py::TestLogViewGoBack::test_escape_posts_go_back PASSED  [ 15%]
tests/test_logs.py::TestLogViewRefresh::test_r_posts_refresh PASSED      [ 17%]
tests/test_logs.py::TestStreamWorkflowLogs::test_yields_parsed_lines PASSED [ 20%]
tests/test_logs.py::TestStreamWorkflowLogs::test_strips_ansi_codes PASSED [ 23%]
tests/test_logs.py::TestStreamWorkflowLogs::test_handles_plain_text_lines PASSED [ 25%]
tests/test_logs.py::TestStreamWorkflowLogs::test_handles_disconnect PASSED [ 28%]
tests/test_logs.py::TestStreamWorkflowLogs::test_skips_blank_lines PASSED [ 30%]
tests/test_logs.py::TestStreamWorkflowLogs::test_terminal_workflow_forces_follow_false PASSED [ 33%]
tests/test_logs.py::TestStreamWorkflowLogs::test_terminal_empty_yields_archive_fallback PASSED [ 35%]
tests/test_logs.py::TestStreamWorkflowLogs::test_non_terminal_empty_does_not_yield_sentinel PASSED [ 38%]
tests/test_logs.py::TestStreamWorkflowLogs::test_read_timeout_yielded_as_sentinel PASSED [ 41%]
tests/test_logs.py::TestStreamWorkflowLogs::test_connect_error_yielded_as_sentinel PASSED [ 43%]
tests/test_logs.py::TestSearchBarToggle::test_slash_shows_search_bar PASSED [ 46%]
tests/test_logs.py::TestSearchBarToggle::test_escape_hides_search_bar PASSED [ 48%]
tests/test_logs.py::TestSearchBarToggle::test_follow_paused_during_search PASSED [ 51%]
tests/test_logs.py::TestSearchHighlightsMatches::test_typing_highlights_matching_lines PASSED [ 53%]
tests/test_logs.py::TestSearchHighlightsMatches::test_search_case_insensitive PASSED [ 56%]
tests/test_logs.py::TestSearchNavigation::test_n_navigates_forward PASSED [ 58%]
tests/test_logs.py::TestSearchNavigation::test_n_wraps_around PASSED     [ 61%]
tests/test_logs.py::TestSearchNavigation::test_shift_n_navigates_backward PASSED [ 64%]
tests/test_logs.py::TestSearchNavigation::test_n_no_op_with_no_matches PASSED [ 66%]
tests/test_logs.py::TestSearchNoMatches::test_no_matches_shows_zero PASSED [ 69%]
tests/test_logs.py::TestSearchClearsOnEscape::test_escape_clears_search_state PASSED [ 71%]
tests/test_logs.py::TestSearchStreamingInteraction::test_new_lines_match_during_search PASSED [ 74%]
tests/test_logs.py::TestSearchEdgeCases::test_empty_search_no_crash PASSED [ 76%]
tests/test_logs.py::TestSearchEdgeCases::test_search_rich_markup_chars PASSED [ 79%]
tests/test_logs.py::TestSearchEdgeCases::test_search_zero_lines PASSED   [ 82%]
tests/test_logs.py::TestGetNodeMainLog::test_returns_content_when_main_logs_artifact_present PASSED [ 84%]
tests/test_logs.py::TestGetNodeMainLog::test_returns_none_when_node_has_no_main_logs_artifact PASSED [ 87%]
tests/test_logs.py::TestGetNodeMainLog::test_returns_none_when_node_missing_from_status PASSED [ 89%]
tests/test_logs.py::TestGetNodeMainLog::test_artifact_endpoint_5xx_yields_log_fetch_result PASSED [ 92%]
tests/test_logs.py::TestArchiveFallbackRendering::test_workflow_level_concat_includes_node_headers PASSED [ 94%]
tests/test_logs.py::TestArchiveFallbackRendering::test_per_node_fallback_renders_archive_content PASSED [ 97%]
tests/test_client.py::test_client_module_direct_symbol PASSED            [100%]

============================== 39 passed in 5.89s ==============================
