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:
+16
-70
@@ -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 사례 참조)."
|
||||
|
||||
Reference in New Issue
Block a user