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차 태깅
759 lines
46 KiB
YAML
759 lines
46 KiB
YAML
meta:
|
|
title: "은퇴자산포트폴리오 — 결정론적 실행 하네스 계약 (QEH)"
|
|
parent_file: "RetirementAssetPortfolio.yaml"
|
|
version: "2026-05-23-QEH-V5.0-PROPOSAL46"
|
|
has_code_implementation: true
|
|
code_path: "tools/validate_harness_context.py"
|
|
purpose: >
|
|
LLM의 자의적 해석 및 주관적 계산을 원천 배제하고, 전문사(Analyst, Trader, Quant) 수준의
|
|
정밀한 판단을 강제하기 위한 결정론적 하네스(Deterministic Harness)의
|
|
입력·출력·검증 규약을 정의한다. 특히 현금 정의(D+2 Only)에 대한 엄격한 잠금을 포함한다.
|
|
|
|
harness_contract:
|
|
principles:
|
|
1: "수량·가격·점수·상태머신은 오직 하네스가 산출하며 LLM은 이를 복사·보고·해설만 한다."
|
|
2: "하네스 산출값과 LLM 출력값이 1 tick 또는 1주라도 다르면 'CRITICAL_EXECUTION_FAILURE'로 간주한다."
|
|
3: "LLM의 '전문성'은 하네스가 포착하지 못하는 질적 맥락(뉴스, 시장 심리, 시나리오 가중)에 집중하되 하네스의 숫자 결론을 번복할 수 없다."
|
|
4: "라우팅, 서빙, 판단, 가격, 수량, 매도우선순위, HTS 주문렌더링은 서로 분리된 단계 하네스로 잠근다."
|
|
5: "하네스는 설명 가능한 결정론적 상태머신이어야 하며 동일 입력·동일 기준시각이면 동일 output과 동일 trace를 생성해야 한다."
|
|
|
|
target_failure_modes:
|
|
- "LLM이 final_action을 서사로 변경"
|
|
- "BUY 차단 상태에서 신규 매수 주문 생성"
|
|
- "SELL/TRIM 우선순위를 산문으로 재정렬"
|
|
- "공식 산출가 대신 차트 가격·심리 가격으로 단가 수정"
|
|
- "수량 재계산·역산으로 1주 이상 변경"
|
|
- "HTS 입력 불가 다중 조건 문장 생성"
|
|
- "blocked_actions 주문을 표에 몰래 포함"
|
|
- "하네스 trace 없이 결론만 요약"
|
|
# ── [2026-05-20_HARNESS_V4] 추가 실패 모드 ─────────────────────────────
|
|
- "[HS009] tp1_price <= current_price인 TP 가격을 HTS 주문표에 그대로 기재 (INVALID_TP_STALE)"
|
|
- "[HS010] validation_status != PASS인 WATCH/BLOCKED 행에 stop_price·tp_price·수량 기재"
|
|
- "[HS011] spec/13_formula_registry.yaml 미등록 공식을 즉석 정의하고 원화 가격·정수 수량 산출"
|
|
- "[M1] regime_trim_guidance_json 외 감축 비율을 LLM이 임의 제시"
|
|
- "[C3] profit_lock_stage를 LLM이 임의 판정 (PROFIT_LOCK_STAGE_CLASSIFIER_V1 무시)"
|
|
- "[H3] secular_leader_gate_active=true 구간에서 tp1_state=DEFERRED_SECULAR_LEADER를 무시하고 TP 매도 신호 생성"
|
|
- "[H3] secular_leader_gate_json 없이 005930·000660에 임의 승자포지션 보호 규칙 적용"
|
|
- "[M4] goal_achievement_pct·goal_eta_label을 LLM이 GOAL_RETIREMENT_V1 외 계산으로 재산출"
|
|
- "[M4] goal_status=IN_PROGRESS를 근거로 heat_gate·cash_floor·stop_loss 규칙 완화"
|
|
# ── [2026-05-20_HARNESS_V5] 추가 실패 모드 ─────────────────────────────
|
|
- "[H6] BREAKOUT_QUALITY_GATE_V2 미실행 상태에서 신규 BUY 주문 생성 (뒷박 차단 우회)"
|
|
- "[H6] breakout_quality_score < 10인 종목을 LLM이 BUY로 승격 (BLOCKED_LATE_CHASE 우회)"
|
|
- "[H7] ANTI_WHIPSAW_HOLD_GATE_V1 미실행 상태에서 WHIPSAW_SUSPECTED 종목 전량 매도"
|
|
- "[H7] anti_whipsaw_gate=WHIPSAW_SUSPECTED를 LLM이 무시하고 CONFIRMED_SELL로 재판단"
|
|
- "[H8] smart_cash_raise_route를 LLM이 직접 선택 (ROUTE_D를 인간 승인 없이 발동)"
|
|
- "[H8] smart_cash_raise_qty를 LLM이 재계산해 SMART_CASH_RAISE_V2 결과와 다른 수량 생성"
|
|
# ── [2026-05-22_HARNESS_V6_3RD] 추가 실패 모드 ──────────────────────────
|
|
- "[A1] SELL_PRICE_SANITY_V1: sell_limit_price < stop_loss_price(역전) 또는 비현실가 INVALID 행을 HTS 주문표에 기재"
|
|
- "[A1] SELL_PRICE_SANITY_V1 INVALID 판정 가격을 LLM이 '지지선상 유효'로 복원"
|
|
- "[A2] ANTI_CHASING_VELOCITY_V1: velocity_1d >= 3.0%인 종목에 당일 BUY 주문 생성 (BLOCK_CHASE 우회)"
|
|
- "[A2] ANTI_CHASING_VELOCITY_V1: PULLBACK_WAIT 상태에서 pullback_entry_trigger_price 미도달 종목에 즉시 BUY 지시"
|
|
- "[A3] CASH_RECOVERY_OPTIMIZER_V1 미산출 상태에서 LLM이 현금부족 해소 조합(종목·수량)을 즉석 계산 (HS011 위반)"
|
|
- "[B1] PULLBACK_ENTRY_TRIGGER_V1: ABOVE_PULLBACK_ZONE 상태에서 BUY 주문 생성"
|
|
- "[B2] INTRADAY_ACTION_MATRIX_V1: 장중(09:00~15:30) 데이터로 공격적 신규 BUY 또는 전량 매도 지시 (TRIM_ONLY 위반)"
|
|
- "[B2] 장중 캡처 기반으로 장후 종가 기준 주간 전략 생성 (종가 미확정 HS011 위반)"
|
|
- "[B3] DISTRIBUTION_SELL_DETECTOR_V1: weighted_sum >= 4.0(DISTRIBUTION_CONFIRMED) 상태에서 LLM이 BUY 우회 서술"
|
|
- "[C1] SELL_WATERFALL_ENGINE_V1: Stage 건너뜀(stage1→stage3 직행) 또는 Stage 2 rebound_wait_qty 즉시 매도 전환"
|
|
- "[C2] SELL_EXECUTION_TIMING_V1 미산출 상태에서 LLM이 매도 타이밍('오후 2시 매도') 임의 지시"
|
|
- "[D1] DETERMINISTIC_ROUTING_ENGINE_V1: 11단계 파이프라인 순서 임의 변경 또는 단계 생략"
|
|
- "[D1] routing_execution_log 표 생략 (INCOMPLETE_ROUTING_LOG)"
|
|
- "[D2] LLM_SERVING_CONSTRAINT_V1: 12가지 금지행동 중 하나라도 위반 (INVALID_LLM_OVERRIDE)"
|
|
- "[E1] PROFIT_RATCHET_TIERED_V2: profit_pct >= 50%(APEX_SUPER) 종목에 trailing_stop 미병기 및 '보유 유지' 단독 서술"
|
|
- "[E2] SELL_VALUE_PRESERVATION_TIERED_V2: emergency_full_sell != true 상태에서 전량 즉시 청산 지시"
|
|
- "[F1] TRADE_QUALITY_SCORER_V1: POOR/CRITICAL grade 종목에 '이번엔 괜찮다' 임의 판단"
|
|
- "[F2] PATTERN_BLACKLIST_AUTO_V1: TRIGGERED 종목에 예외 매수 서술 또는 LLM이 블랙리스트 임의 해제 선언"
|
|
# ── [2026-05-23_PROPOSAL46] 추가 실패 모드 ───────────────────────────────
|
|
- "[PA1] PREDICTIVE_ALPHA_ENGINE_V1: synthesis_verdict=BEARISH인 종목에 BUY 권고 서술 (정반합 판정 우회)"
|
|
- "[PA2] ANTI_LATE_ENTRY_GATE_V2: entry_grade=F(PATTERN_BLACKLIST+1) 종목에 신규 매수 서술"
|
|
- "[PA3] CASH_PRESERVATION_SELL_ENGINE_V2: value_preservation_score 미산출 상태에서 즉시 전량 매도 지시"
|
|
- "[PA4] MACRO_EVENT_SYNCHRONIZER_V1: mega_sell_alert=TRUE 상태에서 BUY/ADD_ON 신규 진입 서술"
|
|
- "[PA5] CONSISTENCY_VALIDATOR_V2: consistency_score < 90 상태에서 분석 보고서 생성 (ABORT 우회)"
|
|
|
|
authoritative_data_sources:
|
|
harness_context: "JSON data._harness_context 섹션 (최우선 확정값)"
|
|
formula_registry: "spec/13_formula_registry.yaml (산식 기준)"
|
|
decision_flow: "spec/09_decision_flow.yaml (상태머신 기준)"
|
|
account_snapshot: "spec/15_account_snapshot_contract.yaml (보유수량·평단·현금 기준)"
|
|
|
|
architecture:
|
|
stage_0_cv_preflight:
|
|
purpose: "분석 시작 전 데이터 정합성을 CONSISTENCY_VALIDATOR_V2(12항목)로 사전 검증. consistency_score < 90 이면 ABORT."
|
|
formula_id: "CONSISTENCY_VALIDATOR_V2"
|
|
required_outputs:
|
|
- "consistency_score"
|
|
- "consistency_report_json"
|
|
- "cv_verdict" # PASS | ABORT
|
|
enforcement:
|
|
- "cv_verdict=ABORT이면 이후 모든 스테이지 실행 중단 및 사용자에게 ABORT 사유 리포트 출력"
|
|
- "cv_verdict=PASS인 경우에만 stage_1_router 진입 허용"
|
|
prohibition:
|
|
- "[PA5] consistency_score < 90 상태에서 분석 계속 진행 금지"
|
|
- "LLM이 CV 항목을 임의 면제하거나 '중요도 낮음'으로 우회 금지"
|
|
stage_1_router:
|
|
purpose: "요청 종류를 ANALYSIS / REVIEW / CAPTURE_PARSE / REPORT_ONLY 로 결정론적 분기"
|
|
required_outputs:
|
|
- "request_route"
|
|
- "route_reason_code"
|
|
- "bundle_selected"
|
|
- "prompt_entrypoint"
|
|
prohibition:
|
|
- "LLM이 사용자의 문장을 재해석해 route를 임의 변경 금지"
|
|
stage_2_serving:
|
|
purpose: "필수 소스만 적재하고 JSON 우선 / XLSX 감사용 분기를 고정"
|
|
required_outputs:
|
|
- "source_manifest"
|
|
- "json_validation_status"
|
|
- "xlsx_audit_needed"
|
|
- "capture_required"
|
|
prohibition:
|
|
- "JSON PASS 상태에서 XLSX 직접 파싱을 주 소스로 승격 금지"
|
|
stage_3_portfolio_guard:
|
|
purpose: "intraday_lock, cash_floor, total_heat, allowed/blocked_actions를 먼저 확정"
|
|
required_outputs:
|
|
- "intraday_lock"
|
|
- "settlement_cash_d2_krw"
|
|
- "buy_power_krw"
|
|
- "cash_floor_status"
|
|
- "total_heat_pct"
|
|
- "heat_gate_status"
|
|
- "allowed_actions"
|
|
- "blocked_actions"
|
|
rules:
|
|
- "사용자 지침(2026-05-18): 오직 D+2 정산현금만이 현금이다. D+0(즉시현금)을 합산하는 행위를 금지한다."
|
|
- "settlement_cash_d2_krw 는 account_snapshot.account_type='일반계좌' 행의 D+2 정산현금 필드만 원장으로 사용한다."
|
|
- "ISA/연금저축 행의 현금성 숫자는 투자완료 계좌잔액 reference이며 포트폴리오 현금원장으로 승격 금지."
|
|
stage_3b_macro_event_sync:
|
|
purpose: "글로벌 거시 이벤트 위험을 MACRO_EVENT_SYNCHRONIZER_V1으로 산출. macro_risk_score >= 70이면 heat_gate_threshold 조정."
|
|
formula_id: "MACRO_EVENT_SYNCHRONIZER_V1"
|
|
required_outputs:
|
|
- "macro_risk_score"
|
|
- "macro_risk_regime" # CALM | ELEVATED | CRITICAL
|
|
- "heat_gate_adj" # 조정값 (pct)
|
|
- "mega_sell_alert" # TRUE | FALSE
|
|
- "macro_event_json"
|
|
enforcement:
|
|
- "macro_risk_regime=CRITICAL이면 heat_gate_threshold를 -10%p 하향 조정"
|
|
- "mega_sell_alert=TRUE이면 신규 BUY/ADD_ON 즉시 차단"
|
|
- "heat_gate_adj 값은 stage_3_portfolio_guard의 heat_gate_status 재계산에 반영"
|
|
prohibition:
|
|
- "[PA4] mega_sell_alert=TRUE 상태에서 BUY/ADD_ON 진입 서술 금지"
|
|
- "LLM이 macro_risk_score를 즉석 계산·재판단 금지"
|
|
stage_4_sell_priority:
|
|
purpose: "복수 매도 후보의 tier/score/rank를 하네스가 확정"
|
|
required_outputs:
|
|
- "sell_priority_lock"
|
|
- "sell_candidates_json"
|
|
prohibition:
|
|
- "LLM이 후보 순서·점수·tier를 재정렬 금지"
|
|
stage_5_execution_math:
|
|
purpose: "수량·단가·손절·익절·트레일링을 공식으로 산출"
|
|
required_outputs:
|
|
- "quantities_lock"
|
|
- "sell_quantities_json"
|
|
- "buy_qty_inputs_json"
|
|
- "prices_lock"
|
|
- "prices_json"
|
|
prohibition:
|
|
- "tick 재정규화 또는 임의 단가 보정 금지"
|
|
stage_6_decision_machine:
|
|
purpose: "state machine trace와 final_action을 확정"
|
|
required_outputs:
|
|
- "decision_lock"
|
|
- "decisions_json"
|
|
- "decision_trace_json"
|
|
prohibition:
|
|
- "LLM이 gate_trace 설명으로 final_action 변경 금지"
|
|
stage_7_order_render:
|
|
purpose: "HTS 입력용 최종 order_blueprint를 하네스가 렌더링"
|
|
required_outputs:
|
|
- "order_blueprint_json"
|
|
- "render_validation_status"
|
|
- "secular_leader_gate_json" # [H3] 005930·000660 승자 포지션 게이트 확정값
|
|
tp_validity_obligation:
|
|
rule: "[HS009] prices_json의 tp1_price/tp2_price는 TP_VALIDITY_CHECK_V1 통과 후 null 또는 정규화 정수"
|
|
required_fields_per_row:
|
|
- "tp1_state # PENDING | TP1_ALREADY_TRIGGERED | DEFERRED_SECULAR_LEADER | ..."
|
|
- "tp2_state"
|
|
- "tp1_price # null이면 HTS 주문표 기재 금지"
|
|
- "tp2_price"
|
|
enforcement: "prices_lock=true이면 LLM이 tp 가격·수량 변경 불가. null 유지."
|
|
secular_leader_gate_obligation:
|
|
rule: "[H3] 005930·000660 행에 secular_leader_gate_active/status 필드 필수"
|
|
enforcement: >
|
|
secular_leader_gate_active=true 구간에서 tp1_state=DEFERRED_SECULAR_LEADER인 경우
|
|
HTS 주문표에 TP1 매도 주문 생성 금지. 하네스가 null로 전달한 tp1_price 복원 금지.
|
|
prohibition:
|
|
- "LLM이 blueprint 밖의 행 추가·삭제·병합 금지"
|
|
- "[HS009] TP_VALIDITY_CHECK_V1 미통과 가격을 HTS 주문표에 기재 금지"
|
|
- "[H3] secular_leader_gate_json 외 주관적 승자포지션 보호 규칙 적용 금지"
|
|
stage_8_goal_tracking:
|
|
purpose: "5억원 목표 자산 달성률·잔여액·ETA를 GOAL_RETIREMENT_V1 공식으로 결정론적 산출"
|
|
formula_id: "GOAL_RETIREMENT_V1"
|
|
required_outputs:
|
|
- "goal_asset_krw"
|
|
- "goal_current_asset_krw"
|
|
- "goal_achievement_pct"
|
|
- "goal_remaining_krw"
|
|
- "goal_eta_months"
|
|
- "goal_eta_label"
|
|
- "goal_status"
|
|
llm_obligation:
|
|
- "분석 보고서 첫 섹션에 목표 달성 현황 표 출력 (goal_achievement_pct·goal_remaining_krw·goal_eta_label)"
|
|
- "goal_status=IN_PROGRESS이더라도 heat_gate·cash_floor·stop_loss 규칙 완화 금지"
|
|
prohibition:
|
|
- "[M4] LLM이 goal_achievement_pct·goal_eta_label을 재계산 금지 (HS011 적용)"
|
|
- "[M4] '이 속도라면 N개월 후 달성' 임의 추정 금지 — GOAL_RETIREMENT_V1 ETA만 인용"
|
|
- "[M4] 목표 달성 압박을 사유로 어떤 리스크 게이트도 완화·우회 금지"
|
|
stage_9_alpha_lead:
|
|
purpose: "뒷북 매수 방지를 위해 ALPHA_LEAD_SCORE_V1과 FOLLOW_THROUGH_CONFIRM_V1 결과를 확정"
|
|
formula_ids: ["ALPHA_LEAD_SCORE_V1", "FOLLOW_THROUGH_CONFIRM_V1"]
|
|
required_outputs_when_active:
|
|
- "alpha_lead_lock"
|
|
- "alpha_lead_json"
|
|
- "follow_through_lock"
|
|
- "follow_through_json"
|
|
prohibition:
|
|
- "lead_entry_state=BLOCKED_LATE_CHASE 종목을 LLM이 BUY로 승격 금지"
|
|
- "follow_through_state=WAIT_PULLBACK 또는 FAILED_BREAKOUT을 본진입 허용으로 해석 금지"
|
|
stage_9b_entry_freshness:
|
|
purpose: "신호 신선도와 추격 위험을 분리해 진입 시점을 결정론적으로 분기"
|
|
formula_ids: ["BREAKOUT_QUALITY_GATE_V2", "FOLLOW_THROUGH_CONFIRM_V1", "PRE_DISTRIBUTION_EARLY_WARNING_V1", "ALPHA_EVALUATION_WINDOW_V1"]
|
|
required_outputs_when_active:
|
|
- "entry_freshness_json"
|
|
enforcement:
|
|
- "BLOCK_LATE_CHASE이면 BUY/STAGED_BUY/ADD_ON 차단"
|
|
- "PULLBACK_WAIT이면 본진입 금지, 재확인만 허용"
|
|
prohibition:
|
|
- "entry_freshness_json 없이 뒷북/추격 BUY를 승인 금지"
|
|
stage_10_anti_distribution:
|
|
purpose: "설거지·분산 구간에서 신규 매수와 증액을 차단"
|
|
formula_id: "DISTRIBUTION_RISK_SCORE_V1"
|
|
required_outputs_when_active:
|
|
- "distribution_lock"
|
|
- "distribution_risk_json"
|
|
enforcement:
|
|
- "anti_distribution_state=BLOCK_BUY 이면 BUY/STAGED_BUY/ADD_ON 차단"
|
|
- "TRIM_REVIEW 이상은 sell_priority_engine 보조 점수에 반영"
|
|
prohibition:
|
|
- "가격 상승·뉴스 호재를 이유로 distribution BLOCK_BUY를 완화 금지"
|
|
stage_11_profit_preservation:
|
|
purpose: "수익금을 시장에 반납하지 않도록 래칫·이익잠금·트레일링 상태를 확정"
|
|
formula_id: "PROFIT_PRESERVATION_STATE_V1"
|
|
required_outputs_when_active:
|
|
- "profit_preservation_lock"
|
|
- "profit_preservation_json"
|
|
enforcement:
|
|
- "PROFIT_LOCK_* 상태는 PROFIT_LOCK_RATCHET_V1/TRAILING_STOP_PRICE_V1/TICK_NORMALIZER_V1 호출을 요구"
|
|
prohibition:
|
|
- "장기 보유 논리로 profit preservation state 해제 금지"
|
|
stage_11b_sell_value_preservation:
|
|
purpose: "회복 보존 매도를 분리해 현금확보와 수익보호를 동시에 관리"
|
|
formula_ids: ["SMART_CASH_RAISE_V2", "K2_STAGED_REBOUND_SELL_V1", "RATCHET_TRAILING_AUTO_V1", "ANTI_WHIPSAW_HOLD_GATE_V1"]
|
|
required_outputs_when_active:
|
|
- "sell_value_preservation_json"
|
|
enforcement:
|
|
- "REBOUND_CONFIRM_HOLD이면 반등대기 수량을 즉시 매도 수량으로 승격 금지"
|
|
- "EMERGENCY_EXIT는 ROUTE_D/stop_breach_gate=BREACH에서만 허용"
|
|
prohibition:
|
|
- "sell_value_preservation_json 없이 현금확보 매도와 수익보호 매도를 혼용 금지"
|
|
stage_12_smart_cash_raise:
|
|
purpose: "현금 확보 매도를 가격 훼손 최소화·반등 대기·분할 체결 방식으로 확정"
|
|
formula_ids: ["SMART_CASH_RAISE_PLAN_V1", "REBOUND_SELL_TRIGGER_V1", "SELL_QUANTITY_ALLOCATOR_V1"]
|
|
required_outputs_when_active:
|
|
- "smart_cash_raise_lock"
|
|
- "cash_raise_plan_json"
|
|
- "rebound_sell_trigger_json"
|
|
- "smart_sell_quantities_json"
|
|
enforcement:
|
|
- "OVERSOLD_REBOUND_SELL은 immediate_qty cap과 rebound_wait_qty 분리를 강제"
|
|
- "DISTRIBUTION_EXIT은 반등 대기보다 감축 우선이나 시장가 전량 금지"
|
|
prohibition:
|
|
- "현금 부족을 이유로 sell_priority 순서·수량·execution_style을 LLM이 임의 변경 금지"
|
|
stage_14_breakout_anti_whipsaw:
|
|
purpose: "뒷박(Late Chase) 차단 및 가짜 매도(Whipsaw) 차단 게이트를 확정"
|
|
formula_ids:
|
|
- "BREAKOUT_QUALITY_GATE_V2"
|
|
- "ANTI_WHIPSAW_HOLD_GATE_V1"
|
|
- "T1_FORCED_SELL_RISK_V1"
|
|
required_outputs_when_active:
|
|
- "breakout_quality_gate_lock"
|
|
- "breakout_quality_gate_json"
|
|
- "anti_whipsaw_gate_lock"
|
|
- "anti_whipsaw_gate_json"
|
|
- "t1_forced_sell_risk_json"
|
|
enforcement:
|
|
- "breakout_quality_gate=BLOCKED_LATE_CHASE 이면 BUY/STAGED_BUY/ADD_ON 즉시 차단"
|
|
- "anti_whipsaw_gate=WHIPSAW_SUSPECTED 이면 당일 전량 매도 차단. INCONCLUSIVE이면 50%만 허용"
|
|
- "t1_forced_sell_risk_score >= 70 이면 BUY_BLOCKED_T1_EXIT_RISK"
|
|
prohibition:
|
|
- "[H6] breakout_quality_gate_json 없이 신규 BUY 주문 생성 금지"
|
|
- "[H7] anti_whipsaw_gate_json 없이 SELL 결론 생성 금지"
|
|
- "[H6/H7] LLM이 스코어·게이트 상태를 재계산·재판단 금지"
|
|
stage_15_smart_cash_raise_v2:
|
|
purpose: "5경로 결정론적 현금확보 라우팅 (SMART_CASH_RAISE_V2) 확정. ROUTE_E: 비상 아닌 일반 현금부족 폴백 경로 추가."
|
|
formula_ids:
|
|
- "SMART_CASH_RAISE_V2"
|
|
- "K2_STAGED_REBOUND_SELL_V1"
|
|
- "SELL_WATERFALL_ENGINE_V1"
|
|
required_outputs_when_active:
|
|
- "smart_cash_raise_route" # ROUTE_A|B|C|D|E|NO_ACTION
|
|
- "smart_cash_raise_qty"
|
|
- "smart_cash_raise_json"
|
|
enforcement:
|
|
- "현금 부족 발생 시 SMART_CASH_RAISE_V2 경로 선택이 cash_raise_plan_json보다 우선 적용"
|
|
- "ROUTE_D는 emergency_full_sell=true 또는 stop_breach_gate=BREACH 조건만 허용"
|
|
- "ROUTE_B는 K2_STAGED_REBOUND_SELL_V1 수량 공식 재사용 의무"
|
|
- "ROUTE_E는 ROUTE_A~D 조건 미해당 일반 현금부족 전용 폴백. rsi14 >= 35 AND stop_breach != BREACH 조건."
|
|
prohibition:
|
|
- "[H8] smart_cash_raise_route를 LLM이 임의 선택 금지"
|
|
- "[H8] ROUTE_D를 인간 승인 없이 서사로 발동 금지"
|
|
- "[H8] 코어 시큘러 리더에 ROUTE_C 외 경로로 전량매도 권고 금지"
|
|
- "[H8] 일반 현금부족 상황에서 ROUTE_D를 ROUTE_E 대신 사용 금지"
|
|
stage_13_execution_quality:
|
|
purpose: "주문금액·거래대금·스프레드·호가단위 기준으로 체결 품질을 검증"
|
|
formula_ids: ["EXECUTION_QUALITY_GUARD_V1", "LIMIT_PRICE_POLICY_V1"]
|
|
required_outputs_when_active:
|
|
- "execution_quality_lock"
|
|
- "execution_quality_json"
|
|
- "limit_price_policy_json"
|
|
enforcement:
|
|
- "execution_quality_status != PASS 이면 HTS 주문표 validation_status=PASS 금지"
|
|
- "TICK_OK 없는 limit_price는 HTS 출력 금지"
|
|
prohibition:
|
|
- "불리한 방향 2회 이상 추격 정정 금지"
|
|
- "심리적 가격·차트 지지선으로 지정가 변경 금지"
|
|
|
|
required_harness_outputs:
|
|
calculation_trace:
|
|
id: "QEH_TRACE"
|
|
required_fields:
|
|
- "formula_id"
|
|
- "inputs_used"
|
|
- "result_raw"
|
|
- "result_normalized" # Tick/Integer 정규화 후
|
|
- "rule_id_triggered"
|
|
gate_status:
|
|
id: "QEH_GATE"
|
|
required_fields:
|
|
- "gate_id"
|
|
- "status" # [PASS, BLOCKED, CAUTION, INSUFFICIENT]
|
|
- "reason_code"
|
|
execution_orders:
|
|
id: "QEH_ORDER"
|
|
required_fields:
|
|
- "ticker"
|
|
- "action"
|
|
- "quantity"
|
|
- "price"
|
|
- "stop_price"
|
|
- "tp_ladder"
|
|
- "lock_status" # true이면 LLM 변경 절대 금지
|
|
order_blueprint:
|
|
id: "QEH_BLUEPRINT"
|
|
required_fields:
|
|
- "account"
|
|
- "ticker"
|
|
- "name"
|
|
- "order_type"
|
|
- "mode"
|
|
- "limit_price_krw"
|
|
- "quantity"
|
|
- "stop_price_krw"
|
|
- "stop_quantity"
|
|
- "take_profit_price_krw"
|
|
- "take_profit_quantity"
|
|
- "validation_status"
|
|
- "rationale_code"
|
|
proposal_reference:
|
|
id: "QEH_PROPOSAL"
|
|
required_fields:
|
|
- "account"
|
|
- "ticker"
|
|
- "name"
|
|
- "proposal_type"
|
|
- "proposed_limit_price_krw"
|
|
- "proposed_price_basis"
|
|
- "proposed_quantity"
|
|
- "proposed_quantity_basis"
|
|
- "stop1_price_krw"
|
|
- "stop1_quantity"
|
|
- "stop2_price_krw"
|
|
- "stop2_quantity"
|
|
- "stop3_price_krw"
|
|
- "stop3_quantity"
|
|
- "tp1_price_krw"
|
|
- "tp1_quantity"
|
|
- "tp2_price_krw"
|
|
- "tp2_quantity"
|
|
- "tp3_price_krw"
|
|
- "tp3_quantity"
|
|
- "execution_status"
|
|
- "block_reason"
|
|
routing_trace:
|
|
id: "QEH_ROUTE"
|
|
required_fields:
|
|
- "request_route"
|
|
- "bundle_selected"
|
|
- "prompt_entrypoint"
|
|
- "source_manifest"
|
|
|
|
required_harness_context_keys:
|
|
scalar_keys:
|
|
- "harness_version"
|
|
- "captured_at"
|
|
- "request_route"
|
|
- "route_reason_code"
|
|
- "bundle_selected"
|
|
- "prompt_entrypoint"
|
|
- "json_validation_status"
|
|
- "capture_required"
|
|
- "cash_ledger_basis"
|
|
- "intraday_lock"
|
|
- "immediate_cash_krw"
|
|
- "settlement_cash_d2_krw"
|
|
- "open_order_amount_krw"
|
|
- "buy_power_krw"
|
|
- "cash_floor_status"
|
|
- "total_heat_pct"
|
|
- "heat_gate_status"
|
|
- "sell_priority_lock"
|
|
- "quantities_lock"
|
|
- "prices_lock"
|
|
- "decision_lock"
|
|
- "blueprint_row_count"
|
|
- "blueprint_checksum"
|
|
- "blueprint_hash_algo"
|
|
# ── [2026-05-20_HARNESS_V4] M4: 5억원 목표 자산 추적 (GOAL_RETIREMENT_V1) ──
|
|
- "goal_asset_krw" # 고정값 500,000,000
|
|
- "goal_current_asset_krw" # 하네스 캡처 시점 총 자산
|
|
- "goal_achievement_pct" # 달성률 (%)
|
|
- "goal_remaining_krw" # 잔여 금액 (KRW)
|
|
- "goal_eta_months" # 복리 ETA (개월) — null 가능
|
|
- "goal_eta_label" # YYYY-MM | ACHIEVED | DATA_MISSING
|
|
- "goal_status" # IN_PROGRESS | ACHIEVED
|
|
collection_keys:
|
|
- "source_manifest_json"
|
|
- "allowed_actions"
|
|
- "blocked_actions"
|
|
- "sell_candidates_json"
|
|
- "sell_quantities_json"
|
|
- "buy_qty_inputs_json"
|
|
- "prices_json"
|
|
- "decisions_json"
|
|
- "decision_trace_json"
|
|
- "order_blueprint_json"
|
|
- "p4_intraday_allowed_actions"
|
|
- "regime_trim_guidance_json" # [2026-05-20_HARNESS_V4] M1: 국면별 감축 가이던스
|
|
- "secular_leader_gate_json" # [2026-05-20_HARNESS_V4] H3: 주도주 승자 포지션 게이트
|
|
- "benchmark_relative_timeseries_json" # [2026-05-21_BRT_HARNESS_V1] 시계열 상대평가
|
|
- "index_relative_health_json" # [2026-05-21_BRT_HARNESS_V1] 지수 상대 건강도
|
|
- "saqg_json" # [2026-05-21_BRT_HARNESS_V1] 위성 알파 품질 게이트
|
|
- "cash_creation_purpose_lock_json" # [2026-05-21_BRT_HARNESS_V1] 현금창출 목적 잠금
|
|
- "sapg_json" # [2026-05-21_BRT_HARNESS_V1] 위성 합산 손익 게이트
|
|
- "alpha_feedback_json" # [2026-05-21_AFL_V1] SAQG 임계값 피드백 권고
|
|
cash_shortfall_upgrade_keys:
|
|
status: "OPTIONAL_UNTIL_GAS_HARNESS_V5"
|
|
activation_rule: "cash_shortfall_lock=true 또는 cash_current_pct_d2 존재 시 CASH_SHORTFALL_V1/trim plan 동기화 검증 필수."
|
|
scalar_keys:
|
|
- "cash_shortfall_lock"
|
|
- "cash_current_pct_d2"
|
|
- "cash_target_pct"
|
|
- "cash_shortfall_min_krw"
|
|
- "cash_shortfall_target_krw"
|
|
- "source_manifest_checksum"
|
|
- "decision_trace_checksum"
|
|
- "checksum_hash_algo"
|
|
collection_keys:
|
|
- "trim_plan_to_min_cash_json"
|
|
apex_upgrade_keys:
|
|
status: "REQUIRED_FROM_GAS_HARNESS_V5"
|
|
activation_rule: "아래 *_lock 중 하나라도 true이면 해당 json 필드와 동기화 검증이 필수다."
|
|
scalar_keys:
|
|
- "alpha_lead_lock"
|
|
- "follow_through_lock"
|
|
- "distribution_lock"
|
|
- "profit_preservation_lock"
|
|
- "smart_cash_raise_lock"
|
|
- "execution_quality_lock"
|
|
- "backdata_learning_lock"
|
|
- "input_snapshot_checksum"
|
|
- "rendered_output_checksum"
|
|
# ── [2026-05-20_HARNESS_V5] 신규 게이트 잠금 키 ──────────────────
|
|
- "breakout_quality_gate_lock" # [H6] BREAKOUT_QUALITY_GATE_V2 확정값 잠금
|
|
- "anti_whipsaw_gate_lock" # [H7] ANTI_WHIPSAW_HOLD_GATE_V1 확정값 잠금
|
|
- "smart_cash_raise_route" # [H8] ROUTE_A/B/C/D/NO_ACTION 확정 라우트
|
|
collection_keys:
|
|
- "alpha_lead_json"
|
|
- "follow_through_json"
|
|
- "distribution_risk_json"
|
|
- "profit_preservation_json"
|
|
- "cash_raise_plan_json"
|
|
- "rebound_sell_trigger_json"
|
|
- "smart_sell_quantities_json"
|
|
- "execution_quality_json"
|
|
- "buy_permission_json"
|
|
- "limit_price_policy_json"
|
|
- "backdata_feature_bank_json"
|
|
# ── [2026-05-20_HARNESS_V5] 신규 JSON 출력 키 ────────────────────
|
|
- "breakout_quality_gate_json" # [H6] 뒷박 차단 게이트 상세 (스코어·상태·차단사유)
|
|
- "anti_whipsaw_gate_json" # [H7] 가짜 매도 차단 게이트 상세 (스코어·홀드일수)
|
|
- "smart_cash_raise_json" # [H8] 4경로 현금확보 결정 상세 (경로·수량·사유)
|
|
- "t1_forced_sell_risk_json" # T+1 강제매도 위험 점수 상세
|
|
- "index_relative_health_json" # [BRT5] 지수 대비 괴리 건강도
|
|
rules:
|
|
- "alpha_lead_lock=true 이면 ALPHA_LEAD_SCORE_V1 결과 외 BUY 선행 판단 금지."
|
|
- "distribution_lock=true 이고 anti_distribution_state=BLOCK_BUY이면 BUY/STAGED_BUY/ADD_ON 금지."
|
|
- "smart_cash_raise_lock=true 이면 현금확보 매도 수량은 cash_raise_plan_json 및 smart_sell_quantities_json만 사용."
|
|
- "execution_quality_lock=true 이면 execution_quality_json.status=PASS 행만 HTS 주문표 PASS 가능."
|
|
- "backdata_learning_lock=true 이면 backdata_feature_bank_json 은 GAS 자동 수집 우선 원장으로만 해석하고, manual correction은 primary source로 승격 금지."
|
|
# ── [2026-05-20_HARNESS_V5] 신규 게이트 규칙 ────────────────────
|
|
- "[H6] breakout_quality_gate_lock=true 이면 breakout_quality_gate_json.gate=BLOCKED_LATE_CHASE 종목에 BUY/ADD_ON 절대 금지."
|
|
- "[H7] anti_whipsaw_gate_lock=true 이면 anti_whipsaw_gate_json.gate=WHIPSAW_SUSPECTED 종목 당일 전량 매도 금지."
|
|
- "[H8] smart_cash_raise_route가 확정된 경우 LLM이 다른 경로를 서술하거나 수량을 변경 금지."
|
|
proposal_reference_upgrade_keys:
|
|
status: "OPTIONAL_UNTIL_GAS_HARNESS_V6"
|
|
activation_rule: "proposal_reference_lock=true 또는 proposal_reference_json 존재 시 사용자 판단용 제안표 동기화 검증 필수."
|
|
scalar_keys:
|
|
- "proposal_reference_lock"
|
|
collection_keys:
|
|
- "proposal_reference_json"
|
|
rules:
|
|
- "proposal_reference_json은 proposal_reference_sheet의 단일 source of truth다."
|
|
- "보고서가 WATCH/BLOCKED 행 가격·수량을 복원 추론하지 않고 proposal_reference_json을 그대로 사용해야 한다."
|
|
proposal_46_upgrade_keys:
|
|
status: "REQUIRED_FROM_GAS_HARNESS_V5_PROPOSAL46"
|
|
activation_rule: "아래 스칼라 키 중 하나라도 하네스 컨텍스트에 존재하면 해당 JSON 필드와 동기화 검증이 필수다."
|
|
scalar_keys:
|
|
# ── CV-V2 사전 검증 ───────────────────────────────────────────────
|
|
- "consistency_score" # 0~100. <90이면 ABORT
|
|
- "cv_verdict" # PASS | ABORT
|
|
# ── MES-V1 거시 이벤트 ──────────────────────────────────────────
|
|
- "macro_risk_score" # 0~100
|
|
- "macro_risk_regime" # CALM | ELEVATED | CRITICAL
|
|
- "mega_sell_alert" # TRUE | FALSE
|
|
# ── PAE-V1 정반합 예측 ─────────────────────────────────────────
|
|
- "direction_confidence" # -100 ~ +100 (synthesis 점수)
|
|
- "synthesis_verdict" # BULLISH | NEUTRAL | BEARISH
|
|
# ── ALEG-V2 뒷박 방지 ─────────────────────────────────────────
|
|
- "anti_late_entry_status" # PASS | GATE1_BLOCK | GATE2_BLOCK | GATE3_BLOCK
|
|
# ── CPSE-V2 가치보존 매도 ──────────────────────────────────────
|
|
- "value_preservation_score" # 0~100 (100=훼손 없음)
|
|
collection_keys:
|
|
- "consistency_report_json" # CV-V2 12항목 체크 결과
|
|
- "macro_event_json" # MES-V1 이벤트 매트릭스 + heat_gate_adj
|
|
- "predictive_alpha_json" # PAE-V1 thesis/antithesis/synthesis 상세
|
|
- "anti_late_entry_json" # ALEG-V2 3게이트 판정 상세
|
|
- "cash_preservation_sell_json" # CPSE-V2 가치보존 매도 계획
|
|
rules:
|
|
- "[PA5] cv_verdict=ABORT이면 consistency_report_json 출력 의무. 이후 분석 진행 금지."
|
|
- "[PA4] mega_sell_alert=TRUE이면 macro_event_json 출력 의무. BUY/ADD_ON 즉시 차단."
|
|
- "[PA1] synthesis_verdict=BEARISH이면 predictive_alpha_json 출력 의무. BUY 차단."
|
|
- "[PA2] anti_late_entry_status != PASS이면 anti_late_entry_json 출력 의무. BUY 즉시 차단."
|
|
- "[PA3] value_preservation_score < 60이면 cash_preservation_sell_json 출력 의무. 분할 매도 우선 적용."
|
|
rules:
|
|
- "request_route / source_manifest_json / bundle_selected / prompt_entrypoint 은 라우팅 하네스 메타데이터로 누락되면 안 된다."
|
|
- "[G4] LLM은 모든 분석 보고서에서 QEH_AUDIT_BLOCK 이전에 routing_serving_trace 표(request_route, bundle_selected, prompt_entrypoint, json_validation_status, capture_required, cash_ledger_basis)를 출력해야 한다. 누락 시 INCOMPLETE_REPORT 처리."
|
|
- "[G4] json_validation_status=PENDING_EXPORT 는 GAS 내부 내보내기 전 상태 코드다. LLM이 이를 '검증 통과' 또는 '데이터 유효'로 서술하는 것을 금지한다."
|
|
- "[G3] 외부 웹·뉴스 가격은 Section B 해설 전용. prices_json 하네스 가격과 다를 때 하네스 가격이 항상 우선하며, 외부 가격을 주문 판단·주문표·QEH_AUDIT_BLOCK에 혼입하는 것을 금지한다."
|
|
- "[G1] cash_shortfall_min_krw / cash_shortfall_target_krw 는 CASH_SHORTFALL_V1 확정값. LLM 즉석 계산 금지."
|
|
- "[G2] trim_plan_to_min_cash_json 은 H2 매도우선순위 기반 GAS 확정 TRIM 계획. LLM이 종목·순서·수량을 임의 변경하는 것을 금지한다."
|
|
- "cash_ledger_basis == D2_ONLY 이어야 한다."
|
|
- "settlement_cash_d2_krw / buy_power_krw 는 restricted_account_types=[ISA, 연금저축] 를 제외한 일반계좌 기준 D+2 정산현금 단독 집계값이어야 한다. (D+0 합산 절대 금지)"
|
|
- "buy_power_krw == settlement_cash_d2_krw - open_order_amount_krw 이어야 한다. immediate_cash_krw 를 cash ledger 합산에 사용하면 안 된다."
|
|
- "allowed_actions 와 blocked_actions 는 중복 원소가 없어야 한다."
|
|
- "sell_priority_lock=true 이면 regime_adjusted_sell_priority_json.final_regime_rank 우선, 없으면 sell_candidates_json.rank 오름차순 확정 배열이어야 한다."
|
|
- "quantities_lock=true 이면 sell_quantities_json / buy_qty_inputs_json 에서 null 외 숫자는 모두 정수여야 한다."
|
|
- "[HS009] prices_lock=true 이면 prices_json 의 stop_price 는 TICK_NORMALIZER_V1 통과 정수여야 한다. tp1_price / tp2_price 는 TP_VALIDITY_CHECK_V1 통과 후 null 또는 정수. tp1_state / tp2_state 필드 필수. 보고서에는 종가/장중 기준을 명시해야 한다."
|
|
- "[C3] prices_json 각 행에 profit_lock_stage / ratchet_partial_qty 필드가 있어야 한다."
|
|
- "decision_lock=true 이면 decisions_json.final_action 과 decision_trace_json.selected_action 이 일치해야 한다."
|
|
- "[HS010] order_blueprint_json 에서 validation_status != 'PASS'인 행의 stop_price_krw / take_profit_price_krw / take_profit_quantity 는 null 이어야 한다."
|
|
- "[HS010-I4] WATCH/BLOCKED 행은 HTS 주문표와 물리적으로 분리된 'WATCH 감시 원장'으로만 출력. 허용 컬럼: reference_stop_price / reference_tp_state / hts_allowed(=false) / reason_code. 금지 컬럼: 지정가/손절가/익절가/주문수량/주문금액 등 HTS 주문 형식 컬럼명."
|
|
- "[HS010-I4] reference_stop_price 는 prices_json 의 stop_price 복사값이며 HTS 주문 입력값이 아님을 표 제목과 컬럼명에 명시해야 한다."
|
|
- "proposal_reference_lock=true 이면 proposal_reference_json은 사용자 판단용 참고 제안표의 단일 source of truth다. 보고서가 가격·수량·실행상태를 재복원하지 않고 이 JSON을 그대로 사용해야 한다."
|
|
- "proposal_reference_json / concise_hts_input_sheet / order_quantity_4stage_gate는 우선순위 컬럼과 가격기준(종가/장중)을 함께 노출해야 한다."
|
|
- "proposal_reference_json.execution_status 는 proposal_only | execution_wait | execution_ready 중 하나여야 한다."
|
|
- "order_blueprint_json 은 schemas/output_schema.json.orders 와 동일한 컬럼 의미를 가진다."
|
|
- "blueprint_row_count == len(order_blueprint_json) 이어야 한다."
|
|
- "[M1] regime_trim_lock=true 이면 regime_trim_guidance_json 의 phase / satellite_trim_pct_min/max / leader_trim_pct_min/max 가 모두 있어야 한다."
|
|
- "blueprint_hash_algo == CRC32_V1 이어야 한다."
|
|
- "blueprint_checksum 은 order_blueprint_json 재계산값과 일치해야 한다."
|
|
- "intraday_lock=true 이면 decisions_json.final_action 은 p4_intraday_allowed_actions 목록 내 값만 허용한다."
|
|
- "[I3] source_manifest_checksum / decision_trace_checksum 은 해당 JSON 재계산값과 일치해야 한다."
|
|
- "[I3] checksum_hash_algo == CRC32_V1 이어야 한다."
|
|
# ── [2026-05-20_HARNESS_V5] 신규 규칙 ────────────────────────────────
|
|
- "[H6] breakout_quality_gate_lock=true 이면 breakout_quality_gate_json 의 gate/score/version 필드가 모두 있어야 한다."
|
|
- "[H6] BUY 주문을 생성할 때는 반드시 breakout_quality_gate_json.gate 가 PILOT_ALLOWED 이어야 한다."
|
|
- "[H7] SELL/TRIM 주문을 생성할 때는 반드시 anti_whipsaw_gate_json.gate 가 CONFIRMED_SELL 또는 INCONCLUSIVE 이어야 한다. WHIPSAW_SUSPECTED이면 해당 매도 주문 BLOCKED."
|
|
- "[H8] smart_cash_raise_route 가 확정되면 smart_cash_raise_json.route 와 반드시 일치해야 한다."
|
|
- "[H8] smart_cash_raise_route=ROUTE_D 이면 emergency_full_sell=true 또는 stop_breach_gate=BREACH 조건이 smart_cash_raise_json에 명시되어야 한다."
|
|
- "[BRT5] index_relative_health_json.relative_health_state=DECOUPLED 또는 OVER_EXTENDED 이면 BUY/STAGED_BUY/ADD_ON 금지."
|
|
- "[BRT5] index_relative_health_json.relative_health_state=UNDERPERFORMING 이면 신규 BUY는 WATCH 우선, 매수 승격 금지."
|
|
- "[BRT1] benchmark_relative_timeseries_json.brt_verdict=BROKEN 종목을 LLM이 HOLD/BUY로 완화 금지."
|
|
- "[BRT2] saqg_json.saqg_v1=EXCLUDED 종목은 BUY 후보와 HTS 주문표에 포함 금지. WATCHLIST_ONLY는 WATCH만 허용."
|
|
- "[BRT3] cash_creation_purpose_lock_json.sell_reason_validity=INVALID_SELL_REASON인 행은 현금창출 또는 위성 편입 목적 매도로 사용할 수 없다."
|
|
- "[BRT4] sapg_json.sapg_status=SAPG_CRITICAL이면 위성 신규 BUY는 전면 차단하고 SFG 강화 상태로 보고한다."
|
|
|
|
# ── [2026-05-20_I5] 외부 시장 데이터 격리 원칙 (G3 EXTERNAL_CONTEXT_ISOLATION) ─
|
|
external_context_isolation:
|
|
version: "2026-05-20_I5"
|
|
principle: >
|
|
외부 웹·뉴스에서 수집한 가격(KOSPI, 개별종목 현재가, 거시지표 등)은
|
|
주문 판단의 Source of Truth가 아니다. prices_json / _harness_context 가 항상 우선한다.
|
|
schema:
|
|
type: "array"
|
|
required_fields:
|
|
source_name: "데이터 공급자 이름 (예: Naver Finance, Bloomberg)"
|
|
fetched_at: "수집 시각 (ISO 8601)"
|
|
symbol: "식별자 (예: 005930, KOSPI)"
|
|
value: "수치값"
|
|
used_for: "CONTEXT_ONLY | VALIDATION_ONLY (주문 판단에 CONTEXT_ONLY 사용 금지)"
|
|
optional_fields:
|
|
as_of: "데이터 기준 시각"
|
|
provider: "세부 공급자"
|
|
rules:
|
|
- "used_for=CONTEXT_ONLY 데이터는 Section B 해설에만 인용 가능. Section A 주문 판단 금지."
|
|
- "외부 가격이 prices_json 하네스 가격과 다를 때 하네스 가격이 절대 우선."
|
|
- "외부 가격을 order_blueprint_json / QEH_AUDIT_BLOCK / HTS 주문표에 혼입 금지."
|
|
- "외부 가격 사용 시 source_name + fetched_at 을 Section B에 명시해야 한다."
|
|
violation_action: "EXTERNAL_DATA_CONTAMINATION — Section A 주문 판단 전체 무효"
|
|
|
|
enforcement_modes:
|
|
STRICT_HARNESS:
|
|
condition: "data._harness_context 존재 시"
|
|
instruction: "하네스 숫자를 'Ground Truth'로 채택. 역산·재계산 금지. 분석 표에 [HARNESS_LOCKED] 태그 부착."
|
|
llm_role: "Reporter/Clerk only"
|
|
mandatory_runtime_checks:
|
|
- "validate_harness_context.py PASS"
|
|
- "validate_harness_sync.py PASS"
|
|
VALIDATION_ONLY:
|
|
condition: "하네스 부재 시"
|
|
instruction: "LLM이 직접 계산하되, 최종 단계에서 하네스 로직(Python)을 호출해 교차 검증 필수."
|
|
risk_label: "[HARNESS_MISSING]"
|
|
|
|
# ── [2026-05-19_LLM_SERVICE_LAYER_V1] LLM 전문 서비스 레이어 ────────────────
|
|
llm_expert_service_layer:
|
|
version: "2026-05-19_LLM_SERVICE_LAYER_V1"
|
|
principle: >
|
|
숫자와 집행은 하네스가, 해석과 교육은 LLM이 담당한다.
|
|
두 영역은 물리적으로 구분된 보고서 섹션(A/B/C)으로 분리하며
|
|
LLM은 Section A의 수치 결론을 어떤 이유로도 번복하거나 완화할 수 없다.
|
|
output_sections:
|
|
section_A_ledger:
|
|
label: "[Section A] 하드-하네스 원장 (The Ledger)"
|
|
owner: "harness + LLM as Reporter/Clerk"
|
|
contents:
|
|
- "QEH_AUDIT_BLOCK (공식 검산 표)"
|
|
- "capture_read_ledger (계좌 판독 원장)"
|
|
- "data_completeness_matrix"
|
|
- "sell_priority_decision_table (해당 시)"
|
|
- "HTS 주문표 (지정가·수량·tick_status)"
|
|
- "decision_trace_table"
|
|
llm_constraint:
|
|
- "수치·등급·행동 결론 변경 금지"
|
|
- "형용사·서사·완화 표현 삽입 금지"
|
|
- "[HARNESS_LOCKED] 태그 부착 의무"
|
|
section_B_briefing:
|
|
label: "[Section B] 전문 애널리스트 브리핑 (The Briefing)"
|
|
owner: "LLM as Expert Analyst"
|
|
trigger: "Section A 완성 후에만 작성 가능"
|
|
permitted_roles:
|
|
expert_commentary:
|
|
purpose: "하네스 결정의 거시경제·시장 맥락 해설"
|
|
example: >
|
|
현금 8.95% — 하네스 판단: CASH_RAISE_REQUIRED.
|
|
[LLM 해설] 현재 달러 강세(USD/KRW 1,380원)와 VIX 반등(20.3)은
|
|
방어현금 10%의 근거가 되며, 글로벌 위험자산 회피 구간으로 진입 가능성이 있습니다.
|
|
glossary_annotation:
|
|
purpose: "영문 퀀트 용어를 한국어 금융 용어로 친절히 풀이"
|
|
example: >
|
|
ATR20(Average True Range 20일): 최근 20거래일 평균 일일변동폭(원).
|
|
높을수록 변동성이 크며, 손절가 계산 시 더 넓은 폭을 허용함을 의미합니다.
|
|
reasoning_review:
|
|
purpose: "하네스가 내린 결정(매도 순위, 등급, TRIM)의 논리적 근거 풀이"
|
|
example: >
|
|
기아(삼성E&A) SELL_PRIORITY 1순위 선정 이유:
|
|
5D 수급 연속 이탈(flow_credit 0.30), 상대약세 지속(RW 4), 섹터 모멘텀 둔화
|
|
economic_insights:
|
|
purpose: "VIX·장단기 금리차·환율이 MRS(시장위험점수)에 영향을 준 경로 교육적 설명"
|
|
example: >
|
|
MRS 6점 → 목표현금 14%: VIX 20.3(+2pt) + 원화약세 1,380원(+1pt) + KOSPI MA20 하회(+2pt)
|
|
이 세 요인이 겹쳐 중립 구간 진입. 신규 매수는 cash_floor 회복 이후 재검토 권장.
|
|
constraint:
|
|
- "Section A의 수치·등급·최종행동 결론을 번복·완화하는 내용 절대 금지"
|
|
- "'그래도 매수 고려 가능', '상황에 따라 유연하게' 등 하네스 차단을 우회하는 서술 금지"
|
|
- "Section B 내에서 새 가격·수량·등급 숫자를 독자적으로 생성 금지"
|
|
section_C_glossary:
|
|
label: "[Section C] 용어 사전 및 학습 가이드 (The Glossary)"
|
|
owner: "LLM as Educator"
|
|
trigger: "보고서 내 주요 지표가 3개 이상 등장할 때 자동 생성"
|
|
required_entries_when_present:
|
|
- "MRS (Market Risk Score) — 정의 + 현재 점수 의미"
|
|
- "flow_credit — 정의 + 임계값(0.40) 의미"
|
|
- "ATR20 — 정의 + 손절폭 계산 연결"
|
|
- "Total Heat — 정의 + 10%/7% 임계값 의미"
|
|
- "CSR001 / TRIM / CASH_RAISE_AUTO — 현금 부족 해소 메커니즘 설명"
|
|
constraint:
|
|
- "정의는 spec/12_field_dictionary.yaml 기준으로 작성"
|
|
- "임의 수치·예시 생성 금지 — 실제 보고서 값만 참조"
|
|
|
|
invalidation_conditions:
|
|
- id: "QEH001_MISSING_LOCK"
|
|
condition: "STRICT_HARNESS 인데 *_lock key 누락"
|
|
action: "INVALID"
|
|
- id: "QEH002_ORDER_DRIFT"
|
|
condition: "output.orders 와 order_blueprint_json 이 불일치"
|
|
action: "INVALID"
|
|
- id: "QEH003_DECISION_DRIFT"
|
|
condition: "output final_action != decisions_json.final_action"
|
|
action: "INVALID"
|
|
- id: "QEH004_BLOCKED_ACTION_EMITTED"
|
|
condition: "blocked_actions 에 있는 주문유형이 output.orders 에 존재"
|
|
action: "INVALID"
|
|
- id: "QEH005_UNSYNCED_TRACE"
|
|
condition: "decision_trace 필수 state/check_id/result 누락"
|
|
action: "INVALID"
|
|
- id: "QEH006_FREEFORM_PRICE"
|
|
condition: "prices_lock=true 인데 output 가격이 prices_json 과 1 tick이라도 다름"
|
|
action: "INVALID"
|
|
- id: "QEH007_FREEFORM_QUANTITY"
|
|
condition: "quantities_lock=true 인데 output 수량이 sell_quantities_json 또는 buy_qty_inputs_json 과 1주라도 다름"
|
|
action: "INVALID"
|
|
- id: "QEH008_CASH_DEFINITION_VIOLATION"
|
|
condition: "보고서가 D+2 외에 D+0 을 합산하여 현금 보유액을 기술 (예: 75백만 원 할루시네이션)"
|
|
action: "INVALID"
|
|
# ── [2026-05-20_HARNESS_V5] 신규 무효화 조건 ──────────────────────────
|
|
- id: "QEH009_BREAKOUT_GATE_BYPASS"
|
|
condition: "breakout_quality_gate_json 없이 신규 BUY 주문이 order_blueprint_json에 존재"
|
|
action: "INVALID — 해당 BUY 행 전체 BLOCKED"
|
|
- id: "QEH010_WHIPSAW_GATE_BYPASS"
|
|
condition: "anti_whipsaw_gate_json.gate=WHIPSAW_SUSPECTED인데 해당 종목 전량 SELL 주문 존재"
|
|
action: "INVALID — WHIPSAW_SUSPECTED 종목 SELL 전량 차단"
|
|
- id: "QEH011_CASH_ROUTE_DRIFT"
|
|
condition: "smart_cash_raise_route 확정값과 실제 매도 주문의 경로·수량이 불일치"
|
|
action: "INVALID — 현금확보 매도 주문표 BLOCKED"
|
|
|
|
implementation_priority:
|
|
phase_1:
|
|
scope: "가드/판단/가격/수량 락 + 하네스 동기화 검증"
|
|
status: "즉시 필수"
|
|
phase_2:
|
|
scope: "order_blueprint_json 생성 + route/source manifest"
|
|
status: "권장"
|
|
phase_3:
|
|
scope: "sync_hash / checksum / signed snapshot 등 감사 강화"
|
|
status: "고도화"
|
|
|
|
compliance_audit:
|
|
tools:
|
|
- "tools/validate_harness_context.py"
|
|
- "tools/validate_harness_sync.py"
|
|
- "tools/validate_engine_harness_gate.py"
|
|
- "tools/run_engine_harness_gate.ps1"
|
|
checks:
|
|
- "blocked_actions 와 output.orders.order_type 충돌 여부"
|
|
- "portfolio_decision.final_action == decisions_json.final_action"
|
|
- "order_blueprint_json / orders 의 행 수, 계좌, ticker, order_type, 가격, 수량 일치 여부"
|
|
- "risk_gate.total_heat_pct == harness total_heat_pct"
|
|
- "risk_gate.cash_floor_status == harness cash_floor_status"
|
|
- "decision_trace.selected_action == decisions_json.final_action"
|