Problem
system_overview and architecture_smells don't distinguish test infrastructure from production code, so test fixtures dominate the signal. v3's "largest modules" are all test files (test_permissions.py 211 fns, test_enrichment.py 210); "call-graph hubs" surface _make_orchestrator (78 callers) and _populate_smoke_data (349 lines) — test fixtures, not architecture.
Fix
Classify modules/functions as test vs production (path heuristics: tests/, *_test.*, *.test.*, conftest.py, inferred runner already detected by the tests-layer detector). Default overview/smells to production code; offer test findings as a separate opt-in view.
Acceptance
system_overview "largest modules" and architecture_smells exclude test code by default; a --include-tests flag restores it.
Problem
system_overviewandarchitecture_smellsdon't distinguish test infrastructure from production code, so test fixtures dominate the signal. v3's "largest modules" are all test files (test_permissions.py 211 fns, test_enrichment.py 210); "call-graph hubs" surface_make_orchestrator(78 callers) and_populate_smoke_data(349 lines) — test fixtures, not architecture.Fix
Classify modules/functions as test vs production (path heuristics:
tests/,*_test.*,*.test.*,conftest.py, inferred runner already detected by the tests-layer detector). Default overview/smells to production code; offer test findings as a separate opt-in view.Acceptance
system_overview"largest modules" andarchitecture_smellsexclude test code by default; a--include-testsflag restores it.