Files
QuantEngineByItz/spec/ownership_map.yaml
T
kjh2064 ee3e799de1 feat: 리밸런싱 엔진 V1 + GAS 버그 수정 (2026-06-13)
주요 변경:
- tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규
  * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합
  * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일)
- src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규
  * Logger.log / getSpreadsheet_() 로 run_all 연동 수정
- src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs
  * _mergePositionRecord_(): 소수주 중복 행 합산 신규
  * parseInt → parseFloat (qty, availQty)
- src/gas_adapter_parts/gdf_01_price_metrics.gs
  * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL
- spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63)
- spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 13:20:14 +09:00

144 lines
8.1 KiB
YAML

meta:
title: "은퇴자산포트폴리오 — 문서 소유권 맵"
version: "2026-05-15-F10_fragmentation_guard"
role: "governance"
purpose: "파일별 책임 범위를 고정해 문서 파편화와 규칙 중복을 방지한다."
ownership_map:
"spec/00_execution_contract.yaml":
owns: ["master_prohibitions", "hard_stops", "capture_read_ledger", "order_validation_contract"]
must_not_own: ["종목 점수", "시장국면 세부 계산", "계좌별 세제 라우팅"]
"spec/risk/aggregate_risk.yaml":
owns: ["Total_Heat", "포트폴리오 하드스톱", "상관충격", "통합 리스크 엔진"]
must_not_own: ["종목 진입 점수", "HTS 출력 스키마"]
"spec/risk/circuit_breakers.yaml":
owns: ["서킷브레이커", "거래비용 통제", "집중도 브레이크", "섹터 급락 대응"]
must_not_own: ["종목 진입 점수", "HTS 출력 스키마"]
"spec/risk/market_risk_cash.yaml":
owns: ["MRS 현금 비중", "VIX/US10Y 위험 현금 룰"]
must_not_own: ["종목 진입 점수", "HTS 출력 스키마"]
"spec/risk/risk_control.yaml":
owns: ["risk_control compatibility index"]
must_not_own: ["새 임계값"]
"spec/risk/portfolio_exposure.yaml":
owns: ["cash_floor", "중복노출", "목표 버킷", "ETF 단계 감축", "현금 버퍼"]
must_not_own: ["개별 종목 점수", "JSON Schema"]
"spec/risk/quality_control.yaml":
owns: ["리스크 품질관리 요약", "금지 규칙 참조"]
must_not_own: ["새 임계값"]
"spec/strategy/sector_model.yaml":
owns: ["sector_model", "CSCS", "등급 alias"]
must_not_own: ["계좌 라우팅", "현금 하한"]
"spec/strategy/entry_gates.yaml":
owns: ["entry_timing_guardrails", "daily_leader_scan", "anti_climax_buy_gate", "staged_entry", "pullback_reentry"]
must_not_own: ["Total_Heat", "capture_read_ledger"]
"spec/strategy/stock_model.yaml":
owns: ["stock_model", "core_satellite_rule"]
must_not_own: ["시장 전체 현금 비중"]
"spec/strategy/rebalancing_trigger.yaml":
owns: ["rebalancing_trigger"]
must_not_own: ["손절/익절 세부 실행"]
"spec/02_data_contract.yaml":
owns: ["source_priority", "data_rule", "data_completeness_gate", "xlsx_analysis_protocol"]
must_not_own: ["매수/매도 결론"]
"spec/12_field_dictionary.yaml":
owns: ["canonical field names", "field aliases", "field units", "field missing policy"]
must_not_own: ["투자 판단 임계값", "매수/매도 결론"]
"spec/13_formula_registry.yaml":
owns: ["executable formulas", "formula inputs", "formula outputs", "formula missing policy"]
must_not_own: ["보고서 양식", "예시 케이스"]
"spec/14_raw_workbook_mapping.yaml":
owns: ["raw workbook sheets", "raw workbook columns", "workbook to canonical field mapping"]
must_not_own: ["계좌 보유수량", "계좌 현금"]
"spec/15_account_snapshot_contract.yaml":
owns: ["image capture account snapshot", "holding quantity", "average cost", "cash fields", "open orders"]
must_not_own: ["시장 가격 수집", "섹터 점수"]
"spec/05_position_sizing.yaml":
owns: ["volatility_targeting", "bayesian_confidence", "kelly brake", "integer sizing"]
must_not_own: ["보유수량 판독", "보고서 양식"]
"spec/06_exit_policy.yaml":
owns: ["exit policy compatibility index"]
must_not_own: ["새 임계값", "신규매수 게이트"]
"spec/exit/stop_loss.yaml":
owns: ["stop_loss"]
must_not_own: ["신규매수 게이트"]
"spec/exit/take_profit.yaml":
owns: ["take_profit"]
must_not_own: ["신규매수 게이트"]
"spec/exit/proactive_exit_radar.yaml":
owns: ["proactive_exit_radar", "divergence_alert", "overhang_warning", "rotation_radar"]
must_not_own: ["신규매수 게이트"]
"spec/exit/event_response.yaml":
owns: ["event_response"]
must_not_own: ["신규매수 게이트"]
"spec/exit/position_review.yaml":
owns: ["position_review_cycle"]
must_not_own: ["신규매수 게이트"]
"spec/07_output_schema.yaml":
owns: ["recommendation_grade", "HTS table columns", "human output contract"]
must_not_own: ["투자 판단 임계값"]
"schemas/output_schema.json":
owns: ["machine-readable final output schema"]
must_not_own: ["투자 규칙 수치"]
# ── 호환 인덱스 (redirect-only, 실제 규칙은 canonical_split_files 참조) ──
"spec/03_risk_policy.yaml":
role: "compatibility_index"
owns: ["legacy path alias for spec/risk/*.yaml"]
must_not_own: ["수치 임계값", "새 리스크 규칙"]
canonical_files: ["spec/risk/portfolio_exposure.yaml", "spec/risk/risk_control.yaml", "spec/risk/quality_control.yaml"]
"spec/04_strategy_rules.yaml":
role: "compatibility_index"
owns: ["legacy path alias for spec/strategy/*.yaml"]
must_not_own: ["수치 임계값", "새 전략 규칙"]
canonical_files: ["spec/strategy/sector_model.yaml", "spec/strategy/entry_gates.yaml", "spec/strategy/stock_model.yaml", "spec/strategy/rebalancing_trigger.yaml"]
"spec/06_exit_policy.yaml":
role: "compatibility_index"
owns: ["legacy path alias for spec/exit/*.yaml"]
must_not_own: ["새 손절/익절 임계값"]
canonical_files: ["spec/exit/stop_loss.yaml", "spec/exit/take_profit.yaml", "spec/exit/proactive_exit_radar.yaml", "spec/exit/event_response.yaml", "spec/exit/position_review.yaml"]
# ── 계산 스키마 ───────────────────────────────────────────────────────────
"spec/08_scoring_rules.yaml":
owns: ["SS001_SECTOR_MODEL_SCORE 계산 규칙", "SS001 6축 점수 임계값", "KOSDAQ 정규화 공식"]
must_not_own: ["포트폴리오 현금 비중", "exit 규칙"]
"spec/09_decision_flow.yaml":
owns: ["Allowed_Action 결정 흐름", "하드게이트 우선순위 순서"]
must_not_own: ["점수 임계값", "포지션 사이징 공식"]
"spec/10_portfolio_rules.yaml":
owns: ["버킷 할당 목표", "core/satellite 비율 규칙"]
must_not_own: ["개별 종목 점수", "시장국면 판정"]
"spec/11_market_regime.yaml":
owns: ["MARKET_REGIME_V1 판정 로직", "MRS 계산 공식", "REGIME 6개 상태 정의"]
must_not_own: ["개별 종목 점수", "포지션 사이징"]
# ── 운영 계약서 ──────────────────────────────────────────────────────────
"spec/16_data_gaps_roadmap.yaml":
owns: ["미구현 항목 추적", "구현 우선순위 로드맵"]
must_not_own: ["확정된 계산 공식", "임계값"]
"spec/17_performance_contract.yaml":
owns: ["performance 탭 구조", "Bayesian multiplier 계산 규칙", "fc_bucket 집계"]
must_not_own: ["시장국면 판정", "종목 스크리닝"]
"spec/18_settings_contract.yaml":
owns: ["settings 탭 파라미터 정의", "total_asset_krw", "risk_budget_override", "orbit_* 키"]
must_not_own: ["계산 공식", "임계값 수치"]
"spec/21_harness_governance_contract.yaml":
owns: ["하네스 거버넌스 3중잠금", "실행 하드락", "배포 차단 정책"]
must_not_own: ["개별 종목 점수", "주문 가격 산출식"]
"spec/strategy_execution_lock_policy.yaml":
owns: ["전략 실행락 임계값", "점수 하네스 기반 BUY/SELL 통제 임계치"]
must_not_own: ["주문 가격 산출식", "시장국면 판정"]
# ── 전략 세부 파일 ──────────────────────────────────────────────────────
"spec/strategy/discovery.yaml":
owns: ["종목 발굴 기준", "스크리닝 필터"]
must_not_own: ["손절/익절 실행", "계좌 현금"]
"spec/strategy/entry_core.yaml":
owns: ["진입 체크리스트", "core 포지션 진입 기준"]
must_not_own: ["Total_Heat 계산", "capture_read_ledger"]
policy:
- "새 규칙 추가 전 ownership_map에서 소유 파일을 먼저 확인한다."
- "must_not_own 영역에 규칙을 추가하면 validate_specs.py에서 실패 처리한다."
- "임계값은 canonical 소유 파일에만 추가한다."