3.6 KiB
| title | type | status | date |
|---|---|---|---|
| refactor: Consolidate duplicate config sources | refactor | active | 2026-04-24 |
Consolidate Duplicate Config Sources
Overview
There are two config files: config.py (51 lines at repo root) and analysis/config.py (13K). The root config defines base Config dataclass with env vars; analysis/config.py contains SVD themes, party lists, colors, and explorer constants. This divergence is confusing and risks stale data.
Problem Frame
- Two sources of truth for configuration
config.pyis small and may be overlookedanalysis/config.pyis large and contains both constants and dynamic config- Risk of updating one but not the other
Requirements Trace
- R1. Single canonical config module
- R2. All existing imports continue to work (backward compatibility)
- R3. No behavior changes
- R4. Tests pass after consolidation
Scope Boundaries
Included:
- Audit both config files
- Decide on canonical location
- Migrate root config into analysis/config.py or re-export
- Update imports
Excluded:
- Changing config values
- Adding new config options
- Refactoring analysis/config.py beyond import consolidation
Key Technical Decisions
- Canonical location: analysis/config.py — it already contains most config and is imported by many modules
- Backward compatibility: Root
config.pybecomes a thin re-export shim:from analysis.config import Config
Implementation Units
- U1. Audit config usage
Goal: Map which modules import from which config file.
Requirements: R1
Dependencies: None
Files:
- Read:
config.py,analysis/config.py
Approach:
grep -rn "from config import\|import config" --include="*.py"grep -rn "from analysis.config import\|import analysis.config" --include="*.py"- Document findings
Test expectation: none — research unit.
Verification:
- Complete list of import sites
- U2. Migrate root config into analysis/config.py
Goal: Move Config dataclass and env var logic to analysis/config.py.
Requirements: R1, R2, R3
Dependencies: U1
Files:
- Modify:
analysis/config.py - Modify:
config.py(re-export shim)
Approach:
- Move
Configdataclass to analysis/config.py - Keep root
config.pyas:from analysis.config import Config - Ensure no circular imports
Execution note: Test-first — write a test that imports both config and analysis.config and verifies they expose the same Config class.
Test scenarios:
- Happy path:
from config import Configstill works - Happy path:
from analysis.config import Configworks - Integration: Both paths return the same object
Verification:
uv run python -c "from config import Config; from analysis.config import Config as AC; assert Config is AC"- All tests pass
- U3. Update import sites
Goal: Standardize imports to use analysis/config.py directly.
Requirements: R1
Dependencies: U2
Files:
- Modify: Files that import from root config.py
Approach:
- Replace
from config import Configwithfrom analysis.config import Config - Mechanical change, one file at a time
Test scenarios:
- Integration: All modified files import successfully
- Regression: All tests pass
Verification:
grep -rn "from config import" --include="*.py"returns nothing (except shim)- Full test suite passes
Risks & Dependencies
| Risk | Mitigation |
|---|---|
| Circular imports | analysis/config.py must not import from modules that import it |
| Hidden dynamic imports | Search thoroughly; test all import paths |
Sources & References
config.pyanalysis/config.py