5166750b53
2026-06-21 비판적 리뷰에서 spec/governance YAML이 코드 상태와 어긋난 채로 방치되던 3개 구체적 사례를 발견하고 정정했다. 근본 원인(동기화를 보장하는 장치 없음)에 대응하는 신규 CI 게이트도 함께 추가한다. - spec/aliases.yaml: deprecated alias 17건 제거(활성 참조 0건 확인 후, 2026-06-30 데드라인 전). role: deprecated_redirect인 spec/03_risk_policy.yaml, spec/04_strategy_rules.yaml 2개만 실삭제 — spec/06_exit_policy.yaml은 role: compatibility_index(영구유지 설계)였음을 재확인해 보존 - governance/gas_logic_migration_ledger_v1.yaml: 존재하지 않는 파일을 canonical 구현으로 인용하던 오류 2건 발견·정정, parity 테스트 부재로 GAS 코드 삭제 보류(F12/F13/F14) - spec/13_formula_registry.yaml: OVERHANG_PRESSURE_V1의 "-500000" 절대값 폴백을 avg_volume_5d 비례식으로 교체(EXPERT_PRIOR 등록) - tools/validate_specs.py: validate_spec_code_sync() 신규 — has_code_implementation/ code_path 필드가 있는 spec만 검사(점진적 롤아웃, 기존 PASS 상태 비파괴), 12개 파일 1차 태깅
137 lines
7.8 KiB
YAML
137 lines
7.8 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 참조) ──
|
|
# 2026-06-22 WBS-7.11: spec/03_risk_policy.yaml, spec/04_strategy_rules.yaml은
|
|
# role: deprecated_redirect(영구 유지가 아닌 완전 폐기 대상)였으며 활성 참조 0건을
|
|
# 확인 후 실삭제했다. 캐노니컬 split 파일들은 영향 없이 그대로 유지된다.
|
|
"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 소유 파일에만 추가한다."
|