fix: portfolio_sector_exposure_summary 렌더러 누락 수정 (SECTION_ERROR 제거)

- _portfolio_sector_exposure_summary() 함수 추가: sector_concentration_json 기반 섹터 비중 테이블
- 섹터 집중 게이트(sector_concentration_gate) 표시
- 렌더러 딕셔너리에 lambda 등록
- 결과: render errors=1 -> errors=0, sections=53->52

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 20:58:38 +09:00
parent a7a7a261ca
commit b670c1a37f
+14
View File
@@ -361,6 +361,19 @@ def _portfolio_performance_summary(data_root: dict, hctx: dict, se: list) -> str
return md
def _portfolio_sector_exposure_summary(data_root: dict, hctx: dict, se: list) -> str:
raw = hctx.get("sector_concentration_json", [])
sectors = _sj(raw) if isinstance(raw, str) else raw
if not isinstance(sectors, list) or not sectors:
return "## 포트폴리오 섹터 노출\n\n_섹터 노출 데이터 없음_"
conc_gate = str(hctx.get("sector_concentration_gate") or "")
md = "## 포트폴리오 섹터 노출\n\n"
md += _kv([("섹터 집중 게이트", conc_gate)])
md += "\n\n"
md += _tbl(sectors, ["sector", "weight_pct", "gate"], max_rows=20)
return md
def _sector_trend_analysis_v1(data_root: dict, hctx: dict, se: list) -> str:
inner_data = data_root.get("data", {}) if isinstance(data_root.get("data"), dict) else {}
payload = {"data": inner_data, "data_root": data_root, "_harness_context": hctx}
@@ -1152,6 +1165,7 @@ def main() -> int:
"immediate_execution_playbook": lambda: _immediate_execution_playbook(hctx, se),
"market_context_learning_note": lambda: _market_context_learning_note(hctx, se),
"portfolio_performance_summary": lambda: _portfolio_performance_summary(data_root, hctx, se),
"portfolio_sector_exposure_summary": lambda: _portfolio_sector_exposure_summary(data_root, hctx, se),
"sector_trend_analysis_v1": lambda: _sector_trend_analysis_v1(data_root, hctx, se),
"investment_quality_headline": lambda: _investment_quality_headline(hctx, se),
"operational_truth_score": lambda: _operational_truth_score(hctx, se),