Files
odysseus/tests/OVERSIZED_TEST_SPLIT_PLAN.md
T
2026-07-28 07:59:37 +01:00

31 KiB

Oversized Test File Split Plan

Note

This is generated planning material based on the current test tree. It does not define runtime behaviour or approve any test-file split.

Purpose

This document plans future oversized test-file splits using current repo data. It does not move files, rewrite assertions, extract helpers, or change CI.

Roadmap context

  • Issue: #3983
  • Parent tracker: #2523
  • Follows #3973 / #3982, the report-only order-sensitivity diagnostics slice.

Methodology

Metrics were generated from the current test tree using:

  • physical line counts for every recursive test_*.py file under tests/;
  • AST counts for test_* functions and Test* classes;
  • one pytest --collect-only -q tests run to count collected items per file;
  • current taxonomy classification from tests._taxonomy.classify_test_path; and
  • static setup-signal scans for route/API, DB/session, import-state, security, filesystem, subprocess/script, async/threading, and UI/static indicators.

Static signals are not proof of risk. They are review prompts. Future split PRs must still inspect each file manually before editing.

Current summary

  • test files scanned: 746
  • collected pytest items counted: 4764
  • large-file threshold: 300 lines
  • large-collected threshold: 20 collected items

Area distribution:

Value Files
cli 30
helpers 1
js 49
routes 35
security 88
services 197
uncategorized 306
unit 40

Sub-area distribution:

Value Files
api 8
atomic 3
auth 11
calendar 12
cli 30
confinement 8
cookbook 20
document 13
email 23
embedding 6
gallery 6
history 3
js 49
llm 21
mcp 12
memory 17
nondict 7
nonstring 23
owner 15
owner_scope 27
parse 5
provider 16
research 17
route 6
routes 19
scheduler 4
scope 5
security 9
session 18
ssrf 6
webhook 4
xss 5

Values below 2 files: 318 values covering 318 files.

Top files by collected pytest items

File Lines Collected tests Test defs Test classes Area Sub-area Signals
tests/test_model_routes.py 2099 163 134 10 routes routes route/api, db/session, import-state, async/threading
tests/test_security_regressions.py 1515 98 74 0 security security route/api, db/session, import-state, security, filesystem, async/threading, ui/static
tests/test_cookbook_helpers.py 958 69 69 0 services cookbook route/api, filesystem, subprocess/script, async/threading, ui/static
tests/test_shell_routes.py 538 69 53 9 routes routes route/api, import-state, filesystem
tests/test_endpoint_probing.py 497 61 36 7 uncategorized endpoint_probing route/api, db/session, import-state
tests/test_pr_blocker_audit.py 964 58 58 0 uncategorized pr_blocker_audit import-state, security, filesystem
tests/test_research_routes_path_confinement.py 565 58 26 0 security confinement route/api, security, filesystem, async/threading
tests/test_run_focus.py 492 55 52 0 uncategorized run_focus security, filesystem, subprocess/script, ui/static
tests/test_agent_loop.py 500 54 54 5 uncategorized agent_loop db/session, import-state
tests/test_manage_mcp_command_allowlist.py 168 45 10 0 services mcp db/session, subprocess/script, async/threading, ui/static
tests/test_provider_classification.py 115 42 9 2 services provider -
tests/test_review_regressions.py 1429 41 41 0 uncategorized review_regressions route/api, db/session, import-state, filesystem, async/threading
tests/test_chat_helpers.py 582 37 24 0 uncategorized chat_helpers route/api, filesystem, async/threading
tests/test_model_context.py 314 36 34 4 uncategorized model_context db/session, import-state
tests/test_email_oauth.py 798 34 29 0 services email route/api, db/session, security, async/threading
tests/test_llm_core_anthropic_temp_omit.py 94 32 6 0 services llm db/session
tests/test_redos_verdict_continuation.py 80 30 5 0 uncategorized redos_verdict_continuation route/api
tests/test_upload_limits_centralized.py 110 29 5 0 uncategorized upload_limits_centralized import-state, filesystem
tests/test_cookbook_docker_access.py 339 28 13 0 services cookbook route/api, filesystem, async/threading
tests/test_rename_user_owner_sync.py 740 27 27 0 security owner route/api, db/session, import-state, filesystem, async/threading
tests/test_taxonomy.py 151 27 17 0 uncategorized taxonomy security, ui/static
tests/test_endpoint_resolver_urls.py 95 27 23 3 uncategorized endpoint_resolver_urls -
tests/test_helpers_import_state.py 426 26 26 0 helpers helpers route/api, db/session, import-state
tests/test_workspace_confine.py 527 25 25 0 uncategorized workspace_confine route/api, filesystem, subprocess/script, async/threading
tests/test_chat_route_tool_policy.py 344 25 23 0 routes route filesystem, ui/static
tests/test_tool_path_confinement.py 303 25 25 0 security confinement import-state, filesystem, async/threading
tests/test_copilot.py 182 25 18 0 uncategorized copilot -
tests/test_llm_core_temperature_reasoning.py 133 25 9 0 services llm -
tests/test_provider_endpoints_url_building.py 86 25 3 0 services provider -
tests/test_bg_job_tools.py 174 23 16 0 uncategorized bg_job_tools filesystem, async/threading

Top files by physical line count

File Lines Collected tests Test defs Test classes Area Sub-area Signals
tests/test_model_routes.py 2099 163 134 10 routes routes route/api, db/session, import-state, async/threading
tests/test_security_regressions.py 1515 98 74 0 security security route/api, db/session, import-state, security, filesystem, async/threading, ui/static
tests/test_review_regressions.py 1429 41 41 0 uncategorized review_regressions route/api, db/session, import-state, filesystem, async/threading
tests/test_pr_blocker_audit.py 964 58 58 0 uncategorized pr_blocker_audit import-state, security, filesystem
tests/test_cookbook_helpers.py 958 69 69 0 services cookbook route/api, filesystem, subprocess/script, async/threading, ui/static
tests/test_upload_handler_cleanup.py 831 13 13 0 uncategorized upload_handler_cleanup route/api, db/session, filesystem, async/threading
tests/test_email_oauth.py 798 34 29 0 services email route/api, db/session, security, async/threading
tests/test_rename_user_owner_sync.py 740 27 27 0 security owner route/api, db/session, import-state, filesystem, async/threading
tests/test_email_owner_scope.py 656 13 13 0 security owner_scope route/api, db/session, filesystem, async/threading
tests/test_model_capability_readers.py 646 20 20 0 uncategorized model_capability_readers -
tests/test_chat_helpers.py 582 37 24 0 uncategorized chat_helpers route/api, filesystem, async/threading
tests/test_api_token_routes.py 578 17 17 0 routes api_routes route/api, db/session, import-state, async/threading
tests/test_research_routes_path_confinement.py 565 58 26 0 security confinement route/api, security, filesystem, async/threading
tests/test_shell_routes.py 538 69 53 9 routes routes route/api, import-state, filesystem
tests/test_workspace_confine.py 527 25 25 0 uncategorized workspace_confine route/api, filesystem, subprocess/script, async/threading
tests/test_agent_loop.py 500 54 54 5 uncategorized agent_loop db/session, import-state
tests/test_endpoint_probing.py 497 61 36 7 uncategorized endpoint_probing route/api, db/session, import-state
tests/test_run_focus.py 492 55 52 0 uncategorized run_focus security, filesystem, subprocess/script, ui/static
tests/test_tool_policy.py 475 18 18 0 uncategorized tool_policy import-state, async/threading
tests/test_kv_cache_invalidation_2927.py 463 8 8 0 uncategorized kv_cache_invalidation_2927 route/api, db/session, import-state, async/threading
tests/test_email_test_connection_oauth.py 436 9 7 0 services email route/api, db/session, async/threading
tests/test_helpers_import_state.py 426 26 26 0 helpers helpers route/api, db/session, import-state
tests/test_endpoint_owner_scope_followup.py 414 11 11 0 security owner_scope route/api, db/session, filesystem
tests/test_api_chat_security.py 404 22 8 0 security security route/api, db/session, import-state, filesystem, async/threading
tests/test_imap_leak_fixes.py 404 15 15 0 uncategorized imap_leak_fixes route/api, db/session, security, filesystem
tests/test_companion_readonly.py 402 17 17 0 uncategorized companion_readonly db/session, import-state
tests/test_upload_handler_atomicity.py 401 9 9 0 uncategorized upload_handler_atomicity filesystem, async/threading
tests/test_auth_regressions.py 370 15 15 0 security auth route/api, db/session, import-state, async/threading
tests/test_calendar_recurrence.py 356 20 20 0 services calendar -
tests/test_task_cookbook_admin_gate.py 350 10 10 0 services cookbook route/api, db/session, import-state, filesystem, async/threading

Split planning candidates

This section is generated from metrics, not from manual judgement. Files are included when they meet at least one threshold:

  • at least 300 physical lines; or
  • at least 20 collected pytest items.

These are planning candidates only. A later split PR still needs a focused manual review of each file before moving tests.

File Why included Setup/risk signals Suggested handling
tests/test_model_routes.py 2099 lines, 163 collected tests route/api, db/session, import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_security_regressions.py 1515 lines, 98 collected tests route/api, db/session, import-state, security, filesystem, async/threading, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_cookbook_helpers.py 958 lines, 69 collected tests route/api, filesystem, subprocess/script, async/threading, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_shell_routes.py 538 lines, 69 collected tests route/api, import-state, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_endpoint_probing.py 497 lines, 61 collected tests route/api, db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_pr_blocker_audit.py 964 lines, 58 collected tests import-state, security, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_research_routes_path_confinement.py 565 lines, 58 collected tests route/api, security, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_run_focus.py 492 lines, 55 collected tests security, filesystem, subprocess/script, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_agent_loop.py 500 lines, 54 collected tests db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_manage_mcp_command_allowlist.py 45 collected tests db/session, subprocess/script, async/threading, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_provider_classification.py 42 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_review_regressions.py 1429 lines, 41 collected tests route/api, db/session, import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_chat_helpers.py 582 lines, 37 collected tests route/api, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_model_context.py 314 lines, 36 collected tests db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_email_oauth.py 798 lines, 34 collected tests route/api, db/session, security, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_llm_core_anthropic_temp_omit.py 32 collected tests db/session Defer mechanical split until setup/risk boundaries are mapped.
tests/test_redos_verdict_continuation.py 30 collected tests route/api Defer mechanical split until setup/risk boundaries are mapped.
tests/test_upload_limits_centralized.py 29 collected tests import-state, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_cookbook_docker_access.py 339 lines, 28 collected tests route/api, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_rename_user_owner_sync.py 740 lines, 27 collected tests route/api, db/session, import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_taxonomy.py 27 collected tests security, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_endpoint_resolver_urls.py 27 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_helpers_import_state.py 426 lines, 26 collected tests route/api, db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_workspace_confine.py 527 lines, 25 collected tests route/api, filesystem, subprocess/script, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_chat_route_tool_policy.py 344 lines, 25 collected tests filesystem, ui/static Good first manual-review candidate if test themes are cohesive.
tests/test_tool_path_confinement.py 303 lines, 25 collected tests import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_copilot.py 25 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_llm_core_temperature_reasoning.py 25 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_provider_endpoints_url_building.py 25 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_bg_job_tools.py 23 collected tests filesystem, async/threading Good first manual-review candidate if test themes are cohesive.
tests/test_research_utils.py 23 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_api_chat_security.py 404 lines, 22 collected tests route/api, db/session, import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_tool_support_heuristic.py 22 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_platform_compat.py 322 lines, 21 collected tests import-state, filesystem, subprocess/script Defer mechanical split until setup/risk boundaries are mapped.
tests/test_context_compactor.py 21 collected tests db/session, import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_prompt_security.py 21 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_fenced_inline_args.py 21 collected tests db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_cache_affinity_local_only.py 21 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_model_capability_readers.py 646 lines, 20 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_calendar_recurrence.py 356 lines, 20 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_null_owner_gates.py 332 lines, 20 collected tests route/api, db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_gallery_endpoint_hardening.py 326 lines, 20 collected tests route/api, security, filesystem, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_redos_llm_parsers.py 20 collected tests No obvious setup signals from static scan. Good first manual-review candidate if test themes are cohesive.
tests/test_code_nav_tools.py 20 collected tests db/session, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_youtube_handler_consolidation.py 20 collected tests route/api, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_tool_policy.py 475 lines import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_fenced_example_not_executed_for_native_models.py 345 lines async/threading Plan split boundaries before editing.
tests/test_api_token_routes.py 578 lines route/api, db/session, import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_companion_readonly.py 402 lines db/session, import-state Defer mechanical split until setup/risk boundaries are mapped.
tests/test_set_admin.py 317 lines route/api, import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_llm_core_ollama.py 324 lines async/threading Plan split boundaries before editing.
tests/test_imap_leak_fixes.py 404 lines route/api, db/session, security, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_auth_regressions.py 370 lines route/api, db/session, import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_agent_migration_manifest.py 340 lines import-state, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_mcp_email_decode_header_spaces.py 327 lines route/api, db/session, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_diffusion_server_security.py 325 lines route/api, import-state, security, filesystem, async/threading, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_upload_handler_cleanup.py 831 lines route/api, db/session, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_email_owner_scope.py 656 lines route/api, db/session, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_upload_routes_owner_scope.py 344 lines route/api, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_endpoint_owner_scope_followup.py 414 lines route/api, db/session, filesystem Defer mechanical split until setup/risk boundaries are mapped.
tests/test_composer_arrow_up_recall_js.py 308 lines filesystem, subprocess/script, ui/static Plan split boundaries before editing.
tests/test_task_cookbook_admin_gate.py 350 lines route/api, db/session, import-state, filesystem, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_email_test_connection_oauth.py 436 lines route/api, db/session, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_upload_handler_atomicity.py 401 lines filesystem, async/threading Plan split boundaries before editing.
tests/test_kv_cache_invalidation_2927.py 463 lines route/api, db/session, import-state, async/threading Defer mechanical split until setup/risk boundaries are mapped.
tests/test_calendar_owner_scope.py 345 lines route/api, db/session, import-state, filesystem, async/threading, ui/static Defer mechanical split until setup/risk boundaries are mapped.
tests/test_skills_manager_owner_isolation.py 306 lines import-state, filesystem Defer mechanical split until setup/risk boundaries are mapped.

Taxonomy coverage gaps among split candidates

uncategorized is a current taxonomy area, not a builder failure. This plan does not reclassify tests because taxonomy changes should be reviewed separately from oversized-file split planning.

Before using any of these files as a split target, first decide whether the taxonomy should be refined in a separate focused issue/PR.

File Lines Collected tests Sub-area Signals Suggested follow-up
tests/test_endpoint_probing.py 497 61 endpoint_probing route/api, db/session, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_pr_blocker_audit.py 964 58 pr_blocker_audit import-state, security, filesystem Review taxonomy and setup/risk boundaries before any split.
tests/test_run_focus.py 492 55 run_focus security, filesystem, subprocess/script, ui/static Review taxonomy and setup/risk boundaries before any split.
tests/test_agent_loop.py 500 54 agent_loop db/session, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_review_regressions.py 1429 41 review_regressions route/api, db/session, import-state, filesystem, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_chat_helpers.py 582 37 chat_helpers route/api, filesystem, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_model_context.py 314 36 model_context db/session, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_redos_verdict_continuation.py 80 30 redos_verdict_continuation route/api Review taxonomy and setup/risk boundaries before any split.
tests/test_upload_limits_centralized.py 110 29 upload_limits_centralized import-state, filesystem Review taxonomy and setup/risk boundaries before any split.
tests/test_taxonomy.py 151 27 taxonomy security, ui/static Review taxonomy and setup/risk boundaries before any split.
tests/test_endpoint_resolver_urls.py 95 27 endpoint_resolver_urls - Review taxonomy mapping before using as a split target.
tests/test_workspace_confine.py 527 25 workspace_confine route/api, filesystem, subprocess/script, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_copilot.py 182 25 copilot - Review taxonomy mapping before using as a split target.
tests/test_bg_job_tools.py 174 23 bg_job_tools filesystem, async/threading Review taxonomy mapping before using as a split target.
tests/test_tool_support_heuristic.py 166 22 tool_support_heuristic - Review taxonomy mapping before using as a split target.
tests/test_platform_compat.py 322 21 platform_compat import-state, filesystem, subprocess/script Review taxonomy and setup/risk boundaries before any split.
tests/test_context_compactor.py 233 21 context_compactor db/session, import-state, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_fenced_inline_args.py 186 21 fenced_inline_args db/session, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_cache_affinity_local_only.py 104 21 cache_affinity_local_only - Review taxonomy mapping before using as a split target.
tests/test_model_capability_readers.py 646 20 model_capability_readers - Review taxonomy mapping before using as a split target.
tests/test_code_nav_tools.py 198 20 code_nav_tools db/session, filesystem, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_youtube_handler_consolidation.py 104 20 youtube_handler_consolidation route/api, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_tool_policy.py 475 18 tool_policy import-state, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_fenced_example_not_executed_for_native_models.py 345 18 fenced_example_not_executed_for_native_models async/threading Review taxonomy mapping before using as a split target.
tests/test_companion_readonly.py 402 17 companion_readonly db/session, import-state Review taxonomy and setup/risk boundaries before any split.
tests/test_set_admin.py 317 17 set_admin route/api, import-state, filesystem, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_imap_leak_fixes.py 404 15 imap_leak_fixes route/api, db/session, security, filesystem Review taxonomy and setup/risk boundaries before any split.
tests/test_agent_migration_manifest.py 340 15 agent_migration_manifest import-state, filesystem Review taxonomy and setup/risk boundaries before any split.
tests/test_upload_handler_cleanup.py 831 13 upload_handler_cleanup route/api, db/session, filesystem, async/threading Review taxonomy and setup/risk boundaries before any split.
tests/test_upload_handler_atomicity.py 401 9 upload_handler_atomicity filesystem, async/threading Review taxonomy mapping before using as a split target.
tests/test_kv_cache_invalidation_2927.py 463 8 kv_cache_invalidation_2927 route/api, db/session, import-state, async/threading Review taxonomy and setup/risk boundaries before any split.

Suggested first manual-review candidates

These are not automatic split approvals. They are categorized candidates with enough size/collection value and no route/API, DB/session, import-state, or security signal from the static scan.

Files still in the uncategorized taxonomy area are listed separately below so taxonomy review does not get mixed into the first split decision.

File Lines Collected tests Area Sub-area Signals Why this is a candidate
tests/test_provider_classification.py 115 42 services provider - 42 collected tests
tests/test_chat_route_tool_policy.py 344 25 routes route filesystem, ui/static 344 lines, 25 collected tests
tests/test_llm_core_temperature_reasoning.py 133 25 services llm - 25 collected tests
tests/test_provider_endpoints_url_building.py 86 25 services provider - 25 collected tests
tests/test_research_utils.py 97 23 services research - 23 collected tests
tests/test_prompt_security.py 203 21 security security - 21 collected tests
tests/test_calendar_recurrence.py 356 20 services calendar - 356 lines, 20 collected tests
tests/test_redos_llm_parsers.py 201 20 services llm - 20 collected tests
tests/test_llm_core_ollama.py 324 16 services llm async/threading 324 lines
tests/test_composer_arrow_up_recall_js.py 308 11 js js filesystem, subprocess/script, ui/static 308 lines

High-risk candidates to defer first

These files may still be split later, but not as the first implementation slice without a separate manual boundary review.

File Lines Collected tests High-risk signals
tests/test_model_routes.py 2099 163 db/session, import-state, route/api
tests/test_security_regressions.py 1515 98 db/session, import-state, route/api, security
tests/test_cookbook_helpers.py 958 69 route/api
tests/test_shell_routes.py 538 69 import-state, route/api
tests/test_endpoint_probing.py 497 61 db/session, import-state, route/api
tests/test_pr_blocker_audit.py 964 58 import-state, security
tests/test_research_routes_path_confinement.py 565 58 route/api, security
tests/test_run_focus.py 492 55 security
tests/test_agent_loop.py 500 54 db/session, import-state
tests/test_manage_mcp_command_allowlist.py 168 45 db/session
tests/test_review_regressions.py 1429 41 db/session, import-state, route/api
tests/test_chat_helpers.py 582 37 route/api
tests/test_model_context.py 314 36 db/session, import-state
tests/test_email_oauth.py 798 34 db/session, route/api, security
tests/test_llm_core_anthropic_temp_omit.py 94 32 db/session

Rules for future split PRs

  • One file or one coherent file-family per PR.
  • No assertion rewrites mixed with file moves.
  • No helper extraction mixed with file moves.
  • No production code changes.
  • No CI workflow changes.
  • Preserve existing markers and taxonomy unless the split issue explicitly says otherwise.
  • Validate the original file's collected tests before and after the split.
  • Validate any neighboring taxonomy/focused-runner behavior if paths change.
  • Treat files with route/API, DB/session, import-state, or security signals as higher-risk until manually reviewed.

Suggested next step

Use this plan to choose the first actual oversized-file split issue. The first split should prefer a file with high review value and low setup risk. Do not start a split PR from this planning issue alone if the file's boundaries are still ambiguous.

Reproduction command

This document was generated with:

venv/bin/python tests/tools/build_oversized_test_split_plan.py

Freshness check

After editing the builder or rebasing the branch, regenerate the plan and confirm no unexpected plan drift:

venv/bin/python tests/tools/build_oversized_test_split_plan.py
git diff --exit-code -- tests/OVERSIZED_TEST_SPLIT_PLAN.md