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 소유 파일에만 추가한다."
