WBS-7.3/7.4/7.5/7.11: 거버넌스 문서 정합성 정리 + spec-코드 동기화 게이트

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차 태깅
This commit is contained in:
2026-06-21 20:08:48 +09:00
parent ee4d1fdab8
commit 5166750b53
25 changed files with 351 additions and 165 deletions
+16 -70
View File
@@ -1,80 +1,26 @@
meta:
title: "은퇴자산포트폴리오 — 경로 alias registry"
version: "2026-05-15-F10_fragmentation_guard"
version: "2026-06-21-WBS7.4_migration_closed"
role: "governance"
purpose: "legacy path와 canonical split path를 명시해 참조 혼선을 방지한다."
aliases:
"spec/03_risk_policy.yaml:portfolio_exposure_framework":
canonical: "spec/risk/portfolio_exposure.yaml:portfolio_exposure_framework"
status: "deprecated"
remove_after: "2026-06-30"
"spec/03_risk_policy.yaml:risk_control":
canonical: "spec/risk/aggregate_risk.yaml:risk_control"
status: "deprecated"
remove_after: "2026-06-30"
"spec/risk/risk_control.yaml:risk_control.aggregate_risk_cap":
canonical: "spec/risk/aggregate_risk.yaml:risk_control.aggregate_risk_cap"
status: "deprecated"
remove_after: "2026-06-30"
"spec/risk/risk_control.yaml:risk_control.market_risk_score_based_cash":
canonical: "spec/risk/market_risk_cash.yaml:risk_control.market_risk_score_based_cash"
status: "deprecated"
remove_after: "2026-06-30"
"spec/risk/risk_control.yaml:risk_control.weekly_circuit_breaker":
canonical: "spec/risk/circuit_breakers.yaml:risk_control.weekly_circuit_breaker"
status: "deprecated"
remove_after: "2026-06-30"
"spec/06_exit_policy.yaml:stop_loss":
canonical: "spec/exit/stop_loss.yaml:stop_loss"
status: "deprecated"
remove_after: "2026-06-30"
"spec/06_exit_policy.yaml:take_profit":
canonical: "spec/exit/take_profit.yaml:take_profit"
status: "deprecated"
remove_after: "2026-06-30"
"spec/03_risk_policy.yaml:quality_control":
canonical: "spec/risk/quality_control.yaml:quality_control"
status: "deprecated"
remove_after: "2026-06-30"
"spec/04_strategy_rules.yaml:sector_model":
canonical: "spec/strategy/sector_model.yaml:sector_model"
status: "deprecated"
remove_after: "2026-06-30"
"spec/04_strategy_rules.yaml:entry_timing_guardrails":
canonical: "spec/strategy/entry_core.yaml:entry_timing_guardrails"
status: "deprecated"
remove_after: "2026-06-30"
"spec/04_strategy_rules.yaml:anti_late_trade_rule":
canonical: "spec/strategy/discovery.yaml:anti_late_trade_rule"
status: "deprecated"
remove_after: "2026-06-30"
"spec/strategy/entry_gates.yaml:entry_timing_guardrails.daily_leader_scan":
canonical: "spec/strategy/leader_scan.yaml:entry_timing_guardrails.daily_leader_scan"
status: "deprecated"
remove_after: "2026-06-30"
"spec/strategy/entry_gates.yaml:entry_timing_guardrails.anti_climax_buy_gate":
canonical: "spec/strategy/leader_scan.yaml:entry_timing_guardrails.anti_climax_buy_gate"
status: "deprecated"
remove_after: "2026-06-30"
"spec/strategy/entry_gates.yaml:entry_timing_guardrails.staged_entry_v2":
canonical: "spec/strategy/staged_entry.yaml:entry_timing_guardrails.staged_entry_v2"
status: "deprecated"
remove_after: "2026-06-30"
"spec/strategy/entry_gates.yaml:entry_timing_guardrails.pullback_reentry_rule":
canonical: "spec/strategy/staged_entry.yaml:entry_timing_guardrails.pullback_reentry_rule"
status: "deprecated"
remove_after: "2026-06-30"
"spec/04_strategy_rules.yaml:stock_model":
canonical: "spec/strategy/stock_model.yaml:stock_model"
status: "deprecated"
remove_after: "2026-06-30"
"spec/04_strategy_rules.yaml:rebalancing_trigger":
canonical: "spec/strategy/rebalancing_trigger.yaml:rebalancing_trigger"
status: "deprecated"
remove_after: "2026-06-30"
# 2026-06-21 WBS-7.4 마이그레이션 종결 기록:
# 아래 17개 alias는 모두 remove_after=2026-06-30 만료 예정이었다.
# repo 전체(spec/src/tools/prompts/examples) grep으로 활성 참조가 0건임을 확인했고,
# 모든 canonical_split_files 대상 파일이 이미 실콘텐츠를 보유하고 있어 마이그레이션이
# 완료된 것으로 판정, 데드라인 전에 alias 항목을 제거했다.
#
# [2026-06-22 WBS-7.11 정정] 작성 당시 이 주석은 호환 인덱스 5개 중 "3개가
# deprecated_redirect라 삭제 보류 중"이라고 적었으나 부정확했다. 실제로는
# spec/06_exit_policy.yaml도 role: compatibility_index(영구 유지 설계)였고,
# role: deprecated_redirect는 spec/03_risk_policy.yaml, spec/04_strategy_rules.yaml
# 2개뿐이었다. WBS-7.11에서 이 2개의 활성 참조 0건을 재확인 후 실삭제했고,
# spec/06_exit_policy.yaml/spec/risk/risk_control.yaml/spec/strategy/entry_gates.yaml
# 3개는 has_code_implementation:false + redirect_only:true로 태깅해 영구 유지한다.
aliases: {}
policy:
- "신규 문서는 canonical 경로만 사용한다."
- "compatibility index와 aliases.yaml 내부의 deprecated 경로는 허용한다."
- "remove_after 이후 deprecated 경로가 active 문서에 남으면 검증 실패로 전환한다."
- "alias 항목을 등록할 때는 반드시 remove_after 데드라인을 두고, 데드라인 전에 활성 참조 0건을 확인한 뒤 제거한다(2026-06-21 사례 참조)."