[
  "tests/test_collectors.py::TestGitHubCollector::test_deduplicates_across_topics",
  "tests/test_collectors.py::TestGitHubCollector::test_empty_response_returns_empty_list",
  "tests/test_collectors.py::TestGitHubCollector::test_fetch_returns_list",
  "tests/test_collectors.py::TestGitHubCollector::test_filters_by_min_stars",
  "tests/test_collectors.py::TestGitHubCollector::test_item_has_required_fields",
  "tests/test_collectors.py::TestGitHubCollector::test_raw_content_includes_description_and_topics",
  "tests/test_collectors.py::TestGitHubCollector::test_uses_auth_header_when_token_provided",
  "tests/test_collectors.py::TestHackerNewsCollector::test_deduplicates_across_queries",
  "tests/test_collectors.py::TestHackerNewsCollector::test_empty_response_returns_empty_list",
  "tests/test_collectors.py::TestHackerNewsCollector::test_fallback_url_for_ask_hn",
  "tests/test_collectors.py::TestHackerNewsCollector::test_fetch_returns_list_of_raw_items",
  "tests/test_collectors.py::TestHackerNewsCollector::test_filters_by_min_points",
  "tests/test_collectors.py::TestHackerNewsCollector::test_item_has_required_fields",
  "tests/test_collectors.py::TestHackerNewsCollector::test_raw_content_includes_title_and_text",
  "tests/test_collectors.py::TestRedditCollector::test_accepts_results_from_any_reddit_subreddit",
  "tests/test_collectors.py::TestRedditCollector::test_deduplicates_across_queries",
  "tests/test_collectors.py::TestRedditCollector::test_deduplicates_within_subreddit",
  "tests/test_collectors.py::TestRedditCollector::test_empty_results_returns_empty_list",
  "tests/test_collectors.py::TestRedditCollector::test_empty_subreddit_returns_empty",
  "tests/test_collectors.py::TestRedditCollector::test_fetch_returns_list",
  "tests/test_collectors.py::TestRedditCollector::test_fetches_and_returns_items",
  "tests/test_collectors.py::TestRedditCollector::test_fetches_multiple_subreddits",
  "tests/test_collectors.py::TestRedditCollector::test_fetches_multiple_subreddits_with_one_token",
  "tests/test_collectors.py::TestRedditCollector::test_fetches_token_then_posts",
  "tests/test_collectors.py::TestRedditCollector::test_filters_by_min_score",
  "tests/test_collectors.py::TestRedditCollector::test_filters_out_wrong_subreddit_urls",
  "tests/test_collectors.py::TestRedditCollector::test_gracefully_handles_exa_error",
  "tests/test_collectors.py::TestRedditCollector::test_item_has_required_fields",
  "tests/test_collectors.py::TestRedditCollector::test_multiple_queries_aggregate_results",
  "tests/test_collectors.py::TestRedditCollector::test_multiple_subreddits_aggregate_results",
  "tests/test_collectors.py::TestRedditCollector::test_passes_include_domains_and_date_to_exa",
  "tests/test_collectors.py::TestRedditCollector::test_passes_reddit_domain_to_exa",
  "tests/test_collectors.py::TestRedditCollector::test_passes_subreddit_domain_to_exa",
  "tests/test_collectors.py::TestRedditCollector::test_raw_content_includes_title_and_selftext",
  "tests/test_collectors.py::TestRedditCollector::test_raw_content_includes_title_and_text",
  "tests/test_collectors.py::TestRedditCollector::test_returns_empty_when_no_api_key",
  "tests/test_collectors.py::TestRedditCollector::test_returns_empty_when_no_credentials",
  "tests/test_deep_dive.py::TestArticleContent::test_requires_raw_text",
  "tests/test_deep_dive.py::TestArticleContent::test_requires_title",
  "tests/test_deep_dive.py::TestArticleContent::test_valid_model_with_url",
  "tests/test_deep_dive.py::TestArticleContent::test_valid_model_without_url",
  "tests/test_deep_dive.py::TestBiasIndicator::test_construction",
  "tests/test_deep_dive.py::TestCitedArgument::test_construction_with_urls",
  "tests/test_deep_dive.py::TestCitedArgument::test_source_urls_defaults_to_empty",
  "tests/test_deep_dive.py::TestContentFetcher::test_fetch_url_raises_on_http_error",
  "tests/test_deep_dive.py::TestContentFetcher::test_fetch_url_returns_article",
  "tests/test_deep_dive.py::TestContentFetcher::test_fetch_url_sets_title_from_html",
  "tests/test_deep_dive.py::TestContentFetcher::test_fetch_url_truncates_at_8000_chars",
  "tests/test_deep_dive.py::TestContentFetcher::test_from_text_default_title",
  "tests/test_deep_dive.py::TestContentFetcher::test_from_text_returns_article",
  "tests/test_deep_dive.py::TestCredibilityBreakdown::test_construction",
  "tests/test_deep_dive.py::TestDeepDiveOrchestrator::test_run_calls_pipeline_in_order",
  "tests/test_deep_dive.py::TestDeepDiveOrchestrator::test_run_dry_run_skips_reporter",
  "tests/test_deep_dive.py::TestDeepDiveOrchestrator::test_run_raises_when_no_input",
  "tests/test_deep_dive.py::TestDeepDiveOrchestrator::test_run_with_text_returns_report",
  "tests/test_deep_dive.py::TestDeepDiveOrchestrator::test_run_with_url_returns_report",
  "tests/test_deep_dive.py::TestDeepDiveReport::test_report_path_optional",
  "tests/test_deep_dive.py::TestDeepDiveReport::test_valid_model",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_file_written_with_utf8",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_filename_contains_date_and_slug",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_credibility_score",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_fact_check_table",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_main_thesis",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_pro_arguments",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_supporting_sources",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_render_markdown_contains_title",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_write_creates_file",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_write_creates_parent_dirs",
  "tests/test_deep_dive.py::TestDeepDiveReporter::test_write_returns_path",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_fallback_when_new_fields_empty",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_shows_bias_indicators_table",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_shows_core_disputes_section",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_shows_credibility_breakdown_table",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_shows_logical_quality_block",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_shows_synthesis_section",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_uses_assessed_fact_checks_status",
  "tests/test_deep_dive.py::TestDeepDiveReporterEnriched::test_render_markdown_uses_cited_arguments_with_links",
  "tests/test_deep_dive.py::TestFactCheck::test_status_can_be_any_string",
  "tests/test_deep_dive.py::TestFactCheck::test_valid_model",
  "tests/test_deep_dive.py::TestLogicalQuality::test_construction",
  "tests/test_deep_dive.py::TestLogicalQuality::test_empty_fallacies_allowed",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluation::test_credibility_score_is_float",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluation::test_valid_model",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluator::test_overall_verdict_is_string",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluator::test_run_calls_llm_with_both_inputs",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluator::test_run_parses_con_arguments",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluator::test_run_parses_pro_arguments",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluator::test_run_returns_evaluation",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_backward_compat_missing_new_fields",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_assessed_fact_checks_with_status",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_bias_indicators",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_cited_pro_arguments",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_core_disputes",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_credibility_breakdown",
  "tests/test_deep_dive.py::TestMultiPerspectiveEvaluatorEnriched::test_run_parses_synthesis",
  "tests/test_deep_dive.py::TestResearchResults::test_valid_model",
  "tests/test_deep_dive.py::TestSearchQueries::test_empty_lists_allowed",
  "tests/test_deep_dive.py::TestSearchQueries::test_valid_model",
  "tests/test_deep_dive.py::TestStructuralAnalysis::test_requires_all_fields",
  "tests/test_deep_dive.py::TestStructuralAnalysis::test_valid_model",
  "tests/test_deep_dive.py::TestStructuralAnalyzer::test_run_calls_llm_with_article_content",
  "tests/test_deep_dive.py::TestStructuralAnalyzer::test_run_parses_search_queries",
  "tests/test_deep_dive.py::TestStructuralAnalyzer::test_run_parses_sub_claims",
  "tests/test_deep_dive.py::TestStructuralAnalyzer::test_run_returns_structural_analysis",
  "tests/test_deep_dive.py::TestStructuralAnalyzerLogicalQuality::test_run_handles_missing_logical_quality",
  "tests/test_deep_dive.py::TestStructuralAnalyzerLogicalQuality::test_run_parses_logical_quality",
  "tests/test_deep_dive.py::TestWebResearcher::test_run_calls_exa_for_each_query_type",
  "tests/test_deep_dive.py::TestWebResearcher::test_run_deduplicates_results_by_url",
  "tests/test_deep_dive.py::TestWebResearcher::test_run_gracefully_handles_exa_error",
  "tests/test_deep_dive.py::TestWebResearcher::test_run_returns_research_results",
  "tests/test_deep_dive.py::TestWebResearcher::test_run_returns_supporting_sources",
  "tests/test_deep_dive.py::TestWebResearcher::test_web_source_has_required_fields",
  "tests/test_deep_dive.py::TestWebSource::test_valid_model",
  "tests/test_main.py::TestScout::test_process_item_assigns_id_from_url",
  "tests/test_main.py::TestScout::test_process_item_returns_none_for_low_value_item",
  "tests/test_main.py::TestScout::test_process_item_returns_usecase_for_valuable_item",
  "tests/test_main.py::TestScout::test_run_dry_run_does_not_write_db",
  "tests/test_main.py::TestScout::test_run_skips_already_stored_items",
  "tests/test_main.py::TestScout::test_run_writes_report_file",
  "tests/test_models.py::TestMakeId::test_deterministic",
  "tests/test_models.py::TestMakeId::test_different_urls_different_ids",
  "tests/test_models.py::TestMakeId::test_matches_sha256_prefix",
  "tests/test_models.py::TestMakeId::test_returns_12_char_hex",
  "tests/test_models.py::TestNovelty::test_values",
  "tests/test_models.py::TestScenarioType::test_all_values_are_chinese_strings",
  "tests/test_models.py::TestScenarioType::test_has_expected_members",
  "tests/test_models.py::TestScenarioType::test_other_fallback",
  "tests/test_models.py::TestUseCase::test_novelty_accepts_string_value",
  "tests/test_models.py::TestUseCase::test_scenario_type_accepts_enum",
  "tests/test_models.py::TestUseCase::test_scenario_type_accepts_string_value",
  "tests/test_models.py::TestUseCase::test_serialises_to_dict",
  "tests/test_models.py::TestUseCase::test_similar_to_ids_defaults_empty",
  "tests/test_models.py::TestUseCase::test_source_platform_hackernews",
  "tests/test_models.py::TestUseCase::test_tools_used_is_list",
  "tests/test_models.py::TestUseCase::test_valid_usecase_creates_successfully",
  "tests/test_models.py::TestUseCase::test_value_score_below_zero_rejected",
  "tests/test_models.py::TestUseCase::test_value_score_clamped_to_0_1",
  "tests/test_processors.py::TestClassifier::test_falls_back_to_other_for_unknown_scenario",
  "tests/test_processors.py::TestClassifier::test_maps_string_to_scenario_type_enum",
  "tests/test_processors.py::TestClassifier::test_result_has_summary",
  "tests/test_processors.py::TestClassifier::test_returns_classification_result",
  "tests/test_processors.py::TestDeduplicator::test_returns_new_when_no_existing",
  "tests/test_processors.py::TestDeduplicator::test_returns_repeat_for_duplicate",
  "tests/test_processors.py::TestDeduplicator::test_returns_similar_when_matching_exists",
  "tests/test_processors.py::TestDeduplicator::test_skips_llm_when_no_existing",
  "tests/test_processors.py::TestValueFilter::test_result_has_required_keys",
  "tests/test_processors.py::TestValueFilter::test_returns_false_for_low_value_item",
  "tests/test_processors.py::TestValueFilter::test_returns_true_for_high_value_item",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_empty_usecases_produces_valid_report",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_filter_log_section_present",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_groups_similar_by_scenario_type",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_includes_date_in_header",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_includes_scan_summary_line",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_new_section_contains_new_usecases",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_returns_markdown_string",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_similar_section_contains_similar_usecases",
  "tests/test_reporters.py::TestObsidianReporterGenerate::test_tools_shown_in_new_section",
  "tests/test_reporters.py::TestObsidianReporterWrite::test_creates_output_dir_if_missing",
  "tests/test_reporters.py::TestObsidianReporterWrite::test_writes_file_to_output_dir",
  "tests/test_reporters.py::TestObsidianReporterWrite::test_written_file_contains_markdown",
  "tests/test_storage.py::TestDatabaseExists::test_exists_false_for_unknown_id",
  "tests/test_storage.py::TestDatabaseExists::test_exists_true_after_save",
  "tests/test_storage.py::TestDatabaseGetByScenario::test_does_not_return_other_scenario",
  "tests/test_storage.py::TestDatabaseGetByScenario::test_limits_results",
  "tests/test_storage.py::TestDatabaseGetByScenario::test_returns_empty_list_when_no_records",
  "tests/test_storage.py::TestDatabaseGetByScenario::test_returns_matching_records",
  "tests/test_storage.py::TestDatabaseGetByScenario::test_returns_multiple_matching_records",
  "tests/test_storage.py::TestDatabaseGetRecent::test_get_recent_returns_last_n_real_value",
  "tests/test_storage.py::TestDatabaseGetRecent::test_roundtrip_preserves_fields",
  "tests/test_storage.py::TestDatabaseInit::test_accepts_path_object",
  "tests/test_storage.py::TestDatabaseInit::test_creates_db_file",
  "tests/test_storage.py::TestDatabaseSave::test_save_duplicate_does_not_raise",
  "tests/test_storage.py::TestDatabaseSave::test_save_multiple_records",
  "tests/test_storage.py::TestDatabaseSave::test_save_persists_record",
  "tests/test_storage.py::TestDatabaseSave::test_save_returns_usecase_id"
]