Question
adpentest/core.py is now ~11,200 lines. Should we split it into submodules, or is single-file the intentional design?
Current single-file rationale (per CLAUDE.md)
- No circular imports
- Centralized tool registry, error handling, profiler
- One file to modify for tool changes
- Easy grep/read for LLM tools
Cost as of today
- Slow IDE navigation, jump-to-def latency
- Merge conflicts concentrate on one file
- Cognitive load for new contributors
- Hard to unit-test in isolation
Options to weigh
- Keep single-file — status quo, invest in section banners +
# region markers instead
- Light split — extract long-standing self-contained blocks (email protocols, SPN enum, DC detection) into 3-4 submodules, keep
core.py as the coordinator
- Full package split —
dc/, enum/, email/, kerberos/, tools/, parallel/ — matches the CLAUDE.md architecture headings
Note: the adpentest_onefile.py single-file distribution can be regenerated automatically (see #40), so a package split does not lose the single-file consumption path.
Non-goals
- Behaviour change
- Public API rename
Cast opinions in the thread.
Question
adpentest/core.pyis now ~11,200 lines. Should we split it into submodules, or is single-file the intentional design?Current single-file rationale (per CLAUDE.md)
Cost as of today
Options to weigh
# regionmarkers insteadcore.pyas the coordinatordc/,enum/,email/,kerberos/,tools/,parallel/— matches the CLAUDE.md architecture headingsNote: the
adpentest_onefile.pysingle-file distribution can be regenerated automatically (see #40), so a package split does not lose the single-file consumption path.Non-goals
Cast opinions in the thread.