============================= 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 33 items

tests/test_logs.py::TestLogViewAppendLines::test_append_lines_stores_and_writes PASSED [  3%]
tests/test_logs.py::TestLogViewSetLogs::test_set_logs_bulk PASSED        [  6%]
tests/test_logs.py::TestLogViewFollowToggle::test_f_toggles_follow PASSED [  9%]
tests/test_logs.py::TestLogViewFollowToggle::test_follow_controls_auto_scroll PASSED [ 12%]
tests/test_logs.py::TestLogViewClear::test_clear_logs PASSED             [ 15%]
tests/test_logs.py::TestLogViewGoBack::test_escape_posts_go_back PASSED  [ 18%]
tests/test_logs.py::TestLogViewRefresh::test_r_posts_refresh PASSED      [ 21%]
tests/test_logs.py::TestStreamWorkflowLogs::test_yields_parsed_lines PASSED [ 24%]
tests/test_logs.py::TestStreamWorkflowLogs::test_strips_ansi_codes PASSED [ 27%]
tests/test_logs.py::TestStreamWorkflowLogs::test_handles_plain_text_lines PASSED [ 30%]
tests/test_logs.py::TestStreamWorkflowLogs::test_handles_disconnect PASSED [ 33%]
tests/test_logs.py::TestStreamWorkflowLogs::test_skips_blank_lines PASSED [ 36%]
tests/test_logs.py::TestStreamWorkflowLogs::test_terminal_workflow_forces_follow_false PASSED [ 39%]
tests/test_logs.py::TestStreamWorkflowLogs::test_terminal_empty_yields_archive_fallback PASSED [ 42%]
tests/test_logs.py::TestStreamWorkflowLogs::test_non_terminal_empty_does_not_yield_sentinel PASSED [ 45%]
tests/test_logs.py::TestStreamWorkflowLogs::test_read_timeout_yielded_as_sentinel PASSED [ 48%]
tests/test_logs.py::TestStreamWorkflowLogs::test_connect_error_yielded_as_sentinel PASSED [ 51%]
tests/test_logs.py::TestSearchBarToggle::test_slash_shows_search_bar PASSED [ 54%]
tests/test_logs.py::TestSearchBarToggle::test_escape_hides_search_bar PASSED [ 57%]
tests/test_logs.py::TestSearchBarToggle::test_follow_paused_during_search PASSED [ 60%]
tests/test_logs.py::TestSearchHighlightsMatches::test_typing_highlights_matching_lines PASSED [ 63%]
tests/test_logs.py::TestSearchHighlightsMatches::test_search_case_insensitive PASSED [ 66%]
tests/test_logs.py::TestSearchNavigation::test_n_navigates_forward PASSED [ 69%]
tests/test_logs.py::TestSearchNavigation::test_n_wraps_around PASSED     [ 72%]
tests/test_logs.py::TestSearchNavigation::test_shift_n_navigates_backward PASSED [ 75%]
tests/test_logs.py::TestSearchNavigation::test_n_no_op_with_no_matches PASSED [ 78%]
tests/test_logs.py::TestSearchNoMatches::test_no_matches_shows_zero PASSED [ 81%]
tests/test_logs.py::TestSearchClearsOnEscape::test_escape_clears_search_state PASSED [ 84%]
tests/test_logs.py::TestSearchStreamingInteraction::test_new_lines_match_during_search PASSED [ 87%]
tests/test_logs.py::TestSearchEdgeCases::test_empty_search_no_crash PASSED [ 90%]
tests/test_logs.py::TestSearchEdgeCases::test_search_rich_markup_chars PASSED [ 93%]
tests/test_logs.py::TestSearchEdgeCases::test_search_zero_lines PASSED   [ 96%]
tests/test_client.py::test_client_module_direct_symbol PASSED            [100%]

============================== 33 passed in 6.18s ==============================
