질적 안정 Q3.1 tail + Q4 효율성 + Q5 dead code 제거. 정식 1.0.0 아님 — 외부 venv 종합 검증 및 사용자 최종 승인 후에만 1.0.0 릴리즈.
Changed
- F/E-rank 복잡도 감축 (Q3.1 tail):
_calcTwoStageDcfCC 63→5 (7 sub-helper 로 분할 — wacc 해결, 고성장률, phase config, terminal growth, baseFcf, normalized FCF, netDebt+shares). E/F-rank (CC≥30) 함수 수 197 → 149 (-24%) 달성. - 효율성 — hotpath lru_cache (Q4.1):
mapSectionTitle/normalizeSectionTitle/loadSectionProfileTable@lru_cache적용. O(n²) 파이프라인 섹션 매핑 루프에서 동일 title 반복 조회 캐시 재사용. - 효율성 — regex 모듈 상수화 (Q4.2): 함수 내부
re.compile(...)15건 → 모듈 레벨 상수.providers/dart/company._QUARTER_COL_RE,providers/dart/_table_horizontalizer._UNIT_ONLY_RE/_DATE_ONLY_RE,providers/dart/docs/finance/boardOfDirectors/parser._MEETING_DATE_RE등 8 파일. 호출당 재컴파일 비용 제거.
Removed
- Dead code 제거 (Q5, 8,201줄 삭감):
analysis/financial/research/narrative.py(3,106줄),research/orchestrator.py(1,123줄),research/thesis.py · sectorKpi · spec · quality(685줄) —generateResearch()는 export 됐으나 외부 호출 경로 0건.research/scoring.py,research/types.py는 scorecard 에서 실사용하므로 유지.providers/dart/finance/mapperData/_backup/sortOrder.json(3,231줄) — 과거 snapshot, 현 sortOrder.json 이 SSoT.
Fixed
forecastCalcs.calcStructuralBreakimport 복구: 기존from dartlab.analysis.financial.research.predictionSignals import calcStructuralBreak는 존재하지 않는 경로.try/except ImportError가 silent 하게 삼켰고structuralBreak는 항상 None 이었음 (Chow Test 신호 실종).dartlab.analysis.financial.predictionSignals로 정상 경로 복구.
Migration
- 제거된
research.generateResearch·research.sectorKpi.calcSectorKpis·research.thesis·research.quality·research.narrative.buildNarrative는 외부 호출 경로가 없던 미공개 API — 외부 사용자 영향 없음. from dartlab.analysis.financial.research import calcPiotroski는 계속 유지.