============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.0.3, pluggy-1.6.0 -- /home/dev/project/.venv/bin/python
cachedir: .pytest_cache
rootdir: /home/dev/project
configfile: pyproject.toml
collecting ... collected 63 items

tests/test_benchmark.py::DataclassShapesTests::test_fact_spec_substring_default_region PASSED [  1%]
tests/test_benchmark.py::DataclassShapesTests::test_fixture_holds_input_and_facts PASSED [  3%]
tests/test_benchmark.py::TokenizerTests::test_count_tokens_empty PASSED  [  4%]
tests/test_benchmark.py::TokenizerTests::test_count_tokens_matches_tokenize_length PASSED [  6%]
tests/test_benchmark.py::TokenizerTests::test_missing_tiktoken_raises_benchmark_error PASSED [  7%]
tests/test_benchmark.py::TokenizerTests::test_tokenize_returns_int_list PASSED [  9%]
tests/test_benchmark.py::MarkerSpansTests::test_log_omitted_marker_detected PASSED [ 11%]
tests/test_benchmark.py::MarkerSpansTests::test_multiple_marker_forms_detected PASSED [ 12%]
tests/test_benchmark.py::MarkerSpansTests::test_no_markers PASSED        [ 14%]
tests/test_benchmark.py::RegionResolutionTests::test_anywhere_returns_full_text PASSED [ 15%]
tests/test_benchmark.py::RegionResolutionTests::test_convo_recent_returns_none_when_marker_missing PASSED [ 17%]
tests/test_benchmark.py::RegionResolutionTests::test_convo_summary_and_recent PASSED [ 19%]
tests/test_benchmark.py::RegionResolutionTests::test_logs_head_and_tail PASSED [ 20%]
tests/test_benchmark.py::RegionResolutionTests::test_logs_head_returns_none_when_no_marker PASSED [ 22%]
tests/test_benchmark.py::FactMatcherTests::test_fact_misses_in_unresolved_region PASSED [ 23%]
tests/test_benchmark.py::FactMatcherTests::test_lines_in_order_pass_and_fail PASSED [ 25%]
tests/test_benchmark.py::FactMatcherTests::test_regex_multiline_on_dotall_off PASSED [ 26%]
tests/test_benchmark.py::FactMatcherTests::test_substring_case_sensitive PASSED [ 28%]
tests/test_benchmark.py::FactMatcherTests::test_substring_hit_and_miss PASSED [ 30%]
tests/test_benchmark.py::AntiGameabilityTests::test_clean_alternate_candidate_is_accepted PASSED [ 31%]
tests/test_benchmark.py::AntiGameabilityTests::test_match_inside_omission_marker_is_rejected PASSED [ 33%]
tests/test_benchmark.py::MarkerNormalizationTests::test_normalize_all_marker_forms PASSED [ 34%]
tests/test_benchmark.py::MarkerNormalizationTests::test_normalize_log_marker_count PASSED [ 36%]
tests/test_benchmark.py::FixtureLoaderTests::test_loads_minimal_valid_fixture PASSED [ 38%]
tests/test_benchmark.py::FixtureLoaderTests::test_rejects_diff_with_non_anywhere_region PASSED [ 39%]
tests/test_benchmark.py::FixtureLoaderTests::test_rejects_lines_in_order_with_string_value PASSED [ 41%]
tests/test_benchmark.py::FixtureLoaderTests::test_rejects_missing_schema_version PASSED [ 42%]
tests/test_benchmark.py::FixtureLoaderTests::test_rejects_unknown_option_key PASSED [ 44%]
tests/test_benchmark.py::FixtureLoaderTests::test_rejects_unsupported_schema_version PASSED [ 46%]
tests/test_benchmark.py::ElidableRegionTests::test_convo_elidable_uses_recent_lines_boundary PASSED [ 47%]
tests/test_benchmark.py::ElidableRegionTests::test_diff_elidable_includes_lines_past_max_hunks PASSED [ 49%]
tests/test_benchmark.py::ElidableRegionTests::test_logs_elidable_empty_when_input_small PASSED [ 50%]
tests/test_benchmark.py::ElidableRegionTests::test_logs_elidable_present_when_input_long_enough PASSED [ 52%]
tests/test_benchmark.py::ElidableRegionTests::test_logs_processed_lines_matches_compress_logs_pipeline PASSED [ 53%]
tests/test_benchmark.py::ElidableRegionTests::test_raw_has_no_elidable_region PASSED [ 55%]
tests/test_benchmark.py::PrefixStabilityTests::test_count_preserving_perturbation_preserves_prefix_for_logs PASSED [ 57%]
tests/test_benchmark.py::PrefixStabilityTests::test_lcp_helper PASSED    [ 58%]
tests/test_benchmark.py::PrefixStabilityTests::test_logs_perturbation_uses_processed_coordinates PASSED [ 60%]
tests/test_benchmark.py::PrefixStabilityTests::test_no_elidable_returns_none PASSED [ 61%]
tests/test_benchmark.py::PrefixStabilityTests::test_raw_returns_none PASSED [ 63%]
tests/test_benchmark.py::FixtureRunnerTests::test_runner_computes_recall_savings_status PASSED [ 65%]
tests/test_benchmark.py::FixtureRunnerTests::test_status_buckets PASSED  [ 66%]
tests/test_benchmark.py::AggregateTests::test_aggregate_prefix_null_when_all_null PASSED [ 68%]
tests/test_benchmark.py::AggregateTests::test_aggregate_weights_recall_by_must_total PASSED [ 69%]
tests/test_benchmark.py::BaselineTests::test_read_baseline_refuses_schema_mismatch PASSED [ 71%]
tests/test_benchmark.py::BaselineTests::test_read_baseline_refuses_tokenizer_mismatch PASSED [ 73%]
tests/test_benchmark.py::BaselineTests::test_write_then_read_roundtrip PASSED [ 74%]
tests/test_benchmark.py::ReporterTests::test_json_report_schema PASSED   [ 76%]
tests/test_benchmark.py::ReporterTests::test_text_report_contains_table_columns_and_summary PASSED [ 77%]
tests/test_benchmark.py::CliWiringTests::test_build_parser_registers_benchmark PASSED [ 79%]
tests/test_benchmark.py::CliWiringTests::test_judge_flag_returns_exit_2 PASSED [ 80%]
tests/test_benchmark.py::EndToEndTests::test_bundled_fixtures_pass_under_current_defaults PASSED [ 82%]
tests/test_benchmark.py::EndToEndTests::test_filtered_run_suppresses_baseline_delta PASSED [ 84%]
tests/test_benchmark.py::EndToEndTests::test_no_op_transform_drops_aggregate_recall_below_100 PASSED [ 85%]
tests/test_benchmark.py::EndToEndTests::test_threshold_flag_via_aggregate PASSED [ 87%]
tests/test_benchmark.py::EndToEndTests::test_update_baseline_survives_incompatible_existing_baseline PASSED [ 88%]
tests/test_engine.py::EngineTests::test_execute_request_allows_provider_switch_by_replaying_local_history PASSED [ 90%]
tests/test_engine.py::EngineTests::test_execute_request_deduplicates_stable_developer_instructions PASSED [ 92%]
tests/test_engine.py::EngineTests::test_execute_request_replays_local_history_across_session_runs PASSED [ 93%]
tests/test_processors.py::ProcessorTests::test_compress_logs_collapses_duplicates PASSED [ 95%]
tests/test_processors.py::ProcessorTests::test_compress_unified_diff_keeps_changes PASSED [ 96%]
tests/test_processors.py::ProcessorTests::test_strip_ansi FAILED         [ 98%]
tests/test_processors.py::ProcessorTests::test_summarize_conversation_preserves_recent_context PASSED [100%]

=================================== FAILURES ===================================
________________________ ProcessorTests.test_strip_ansi ________________________

self = <tests.test_processors.ProcessorTests testMethod=test_strip_ansi>

    def test_strip_ansi(self) -> None:
>       self.assertEqual(strip_ansi("\x1b[31merror\x1b[0m"), "error_unexpected")
E       AssertionError: 'error' != 'error_unexpected'
E       - error
E       + error_unexpected

self       = <tests.test_processors.ProcessorTests testMethod=test_strip_ansi>

tests/test_processors.py:21: AssertionError
=========================== short test summary info ============================
FAILED tests/test_processors.py::ProcessorTests::test_strip_ansi - AssertionError: 'error' != 'error_unexpected'
- error
+ error_unexpected
========================= 1 failed, 62 passed in 0.41s =========================
