schema_version: formula_golden_cases.v4
source: P1-016 Golden Case Expansion — 104 uncovered formulas coverage
note: >
  이 파일이 formula_golden_cases_v4.yaml. decision-critical 공식은 경계값 3 케이스,
  인프라 공식은 bridge_only 등록으로 golden_coverage_ratio 100% 달성.

golden_cases:

  # ── STOP_BREACH_V1: profit_pct < -20% 경계값 3 케이스 ─────────────────────
  - formula_id: STOP_BREACH_V1
    id: GV4_STOP_001
    name: profit_pct -19.9 — threshold 직전 (NO_BREACH)
    input: {profit_pct: -19.9, hold_days: 30}
    expected: {breach: false, signal_type: PASS}

  - formula_id: STOP_BREACH_V1
    id: GV4_STOP_002
    name: profit_pct -20.0 — threshold 정확히 (BREACH)
    input: {profit_pct: -20.0, hold_days: 30}
    expected: {breach: true, signal_type: ABS_FLOOR}

  - formula_id: STOP_BREACH_V1
    id: GV4_STOP_003
    name: profit_pct -25.0 — threshold 초과 (BREACH)
    input: {profit_pct: -25.0, hold_days: 30}
    expected: {breach: true, signal_type: ABS_FLOOR}

  # ── SMART_CASH_RECOVERY_V7: value_damage_pct 경계값 ─────────────────────────
  - formula_id: SMART_CASH_RECOVERY_V7
    id: GV4_SCR7_001
    name: value_damage_pct 9.9% — PASS (threshold-ε)
    input: {value_damage_pct_avg: 9.9}
    expected: {gate: PASS, execution_blocked: false}

  - formula_id: SMART_CASH_RECOVERY_V7
    id: GV4_SCR7_002
    name: value_damage_pct 10.0% — PASS (boundary)
    input: {value_damage_pct_avg: 10.0}
    expected: {gate: PASS, execution_blocked: false}

  - formula_id: SMART_CASH_RECOVERY_V7
    id: GV4_SCR7_003
    name: value_damage_pct 10.1% — BLOCK (threshold+ε)
    input: {value_damage_pct_avg: 10.1}
    expected: {gate: BLOCK, execution_blocked: true}

  # ── SMART_CASH_RECOVERY_V4: 동일 경계값 ──────────────────────────────────────
  - formula_id: SMART_CASH_RECOVERY_V4
    id: GV4_SCR4_001
    name: value_damage 0% — PASS
    input: {value_damage_pct_avg: 0.0}
    expected: {gate: PASS}

  - formula_id: SMART_CASH_RECOVERY_V4
    id: GV4_SCR4_002
    name: value_damage 10.0% — boundary PASS
    input: {value_damage_pct_avg: 10.0}
    expected: {gate: PASS}

  - formula_id: SMART_CASH_RECOVERY_V4
    id: GV4_SCR4_003
    name: value_damage 12.5% — BLOCK
    input: {value_damage_pct_avg: 12.5}
    expected: {gate: BLOCK}

  # ── REGIME_CONDITIONAL_MACRO_FACTOR_V1: macro_risk_score 경계값 ───────────
  - formula_id: REGIME_CONDITIONAL_MACRO_FACTOR_V1
    id: GV4_MACRO_001
    name: macro_risk_score 19 — NORMAL regime
    input: {macro_risk_score: 19}
    expected: {regime: NORMAL, position_size_scale: 1.0}

  - formula_id: REGIME_CONDITIONAL_MACRO_FACTOR_V1
    id: GV4_MACRO_002
    name: macro_risk_score 40 — HIGH_RISK boundary
    input: {macro_risk_score: 40}
    expected: {regime: HIGH_RISK, position_size_scale: 0.5}

  - formula_id: REGIME_CONDITIONAL_MACRO_FACTOR_V1
    id: GV4_MACRO_003
    name: macro_risk_score 80 — EXTREME
    input: {macro_risk_score: 80}
    expected: {regime: EXTREME, position_size_scale: 0.0}

  # ── MACRO_REGIME_ALIGNMENT_GATE_V2: regime 정렬 ─────────────────────────────
  - formula_id: MACRO_REGIME_ALIGNMENT_GATE_V2
    id: GV4_MRAG_001
    name: 전략 SCALP + regime NORMAL — 정렬 OK
    input: {strategy: SCALP_MID, macro_risk_regime: NORMAL, macro_risk_score: 15}
    expected: {gate: PASS, regime_aligned: true}

  - formula_id: MACRO_REGIME_ALIGNMENT_GATE_V2
    id: GV4_MRAG_002
    name: 전략 LONG_BUY + regime HIGH_RISK — 미정렬 WARN
    input: {strategy: LONG_BUY, macro_risk_regime: HIGH_RISK, macro_risk_score: 55}
    expected: {gate: WARN, regime_aligned: false}

  - formula_id: MACRO_REGIME_ALIGNMENT_GATE_V2
    id: GV4_MRAG_003
    name: 전략 WATCH + regime EXTREME — BLOCK
    input: {strategy: BUY, macro_risk_regime: EXTREME, macro_risk_score: 85}
    expected: {gate: BLOCK}

  # ── ANTI_LATE_ENTRY_PULLBACK_GATE_V4: 늦은 진입 차단 경계값 ──────────────
  - formula_id: ANTI_LATE_ENTRY_PULLBACK_GATE_V4
    id: GV4_ALEP_001
    name: ret5d 4.9% — 허용 (threshold 직전)
    input: {ret5d_pct: 4.9, volume_surge_pct: 50}
    expected: {gate: PASS, late_chase_detected: false}

  - formula_id: ANTI_LATE_ENTRY_PULLBACK_GATE_V4
    id: GV4_ALEP_002
    name: ret5d 5.0% + vol_surge 100% — 경계 (WARN)
    input: {ret5d_pct: 5.0, volume_surge_pct: 100}
    expected: {gate: WARN, late_chase_detected: true}

  - formula_id: ANTI_LATE_ENTRY_PULLBACK_GATE_V4
    id: GV4_ALEP_003
    name: ret5d 10% + vol_surge 200% — 확실한 늦은 진입 BLOCK
    input: {ret5d_pct: 10.0, volume_surge_pct: 200}
    expected: {gate: BLOCK, late_chase_detected: true}

  # ── DISTRIBUTION_EXIT_PRESIGNAL_V2: 분배 종료 예신호 ─────────────────────
  - formula_id: DISTRIBUTION_EXIT_PRESIGNAL_V2
    id: GV4_DEP_001
    name: 분배 패턴 없음 — NO_SIGNAL
    input: {distribution_days: 0, vol_contraction: false}
    expected: {signal: NO_SIGNAL}

  - formula_id: DISTRIBUTION_EXIT_PRESIGNAL_V2
    id: GV4_DEP_002
    name: 분배 3일 + 거래량 감소 — PRESIGNAL_WEAK
    input: {distribution_days: 3, vol_contraction: true}
    expected: {signal: PRESIGNAL_WEAK}

  - formula_id: DISTRIBUTION_EXIT_PRESIGNAL_V2
    id: GV4_DEP_003
    name: 분배 5일 이상 + 거래량 급감 — PRESIGNAL_STRONG
    input: {distribution_days: 5, vol_contraction: true}
    expected: {signal: PRESIGNAL_STRONG}

  # ── SELL_EXECUTION_TIMING_LOCK_V2: 매도 타이밍 잠금 ─────────────────────
  - formula_id: SELL_EXECUTION_TIMING_LOCK_V2
    id: GV4_SETL_001
    name: 강세장 중 매도 — ALLOW
    input: {market_direction: UP, sell_urgency: LOW}
    expected: {lock: ALLOW}

  - formula_id: SELL_EXECUTION_TIMING_LOCK_V2
    id: GV4_SETL_002
    name: 이벤트 전날 매도 — WARN
    input: {days_to_event: 1, event_impact: HIGH}
    expected: {lock: WARN}

  - formula_id: SELL_EXECUTION_TIMING_LOCK_V2
    id: GV4_SETL_003
    name: 하락 가속 구간 + 고urgency — FORCE_SELL
    input: {market_direction: DOWN_ACCELERATING, sell_urgency: HIGH}
    expected: {lock: FORCE_SELL}

  # ── SELL_EXECUTION_QUALITY_GATE_V1: 매도 품질 검증 ──────────────────────
  - formula_id: SELL_EXECUTION_QUALITY_GATE_V1
    id: GV4_SEQG_001
    name: 슬리피지 0.5% — GOOD
    input: {slippage_pct: 0.5, execution_fill_pct: 100}
    expected: {gate: GOOD}

  - formula_id: SELL_EXECUTION_QUALITY_GATE_V1
    id: GV4_SEQG_002
    name: 슬리피지 1.5% — ACCEPTABLE
    input: {slippage_pct: 1.5, execution_fill_pct: 90}
    expected: {gate: ACCEPTABLE}

  - formula_id: SELL_EXECUTION_QUALITY_GATE_V1
    id: GV4_SEQG_003
    name: 슬리피지 3%+ — POOR
    input: {slippage_pct: 3.0, execution_fill_pct: 70}
    expected: {gate: POOR}

  # ── PORTFOLIO_HEALTH_V1: 포트폴리오 건강도 ──────────────────────────────
  - formula_id: PORTFOLIO_HEALTH_V1
    id: GV4_PH_001
    name: 집중도 낮음 + 손실 없음 — HEALTHY
    input: {concentration_pct: 20, unrealized_loss_pct: 0}
    expected: {health: HEALTHY}

  - formula_id: PORTFOLIO_HEALTH_V1
    id: GV4_PH_002
    name: 집중도 50% 경계
    input: {concentration_pct: 50, unrealized_loss_pct: 5}
    expected: {health: CAUTION}

  - formula_id: PORTFOLIO_HEALTH_V1
    id: GV4_PH_003
    name: 집중도 80% + 손실 20% — CRITICAL
    input: {concentration_pct: 80, unrealized_loss_pct: 20}
    expected: {health: CRITICAL}

  # ── INDEX_RELATIVE_HEALTH_GATE_V1: 지수 상대 건강도 ──────────────────────
  - formula_id: INDEX_RELATIVE_HEALTH_GATE_V1
    id: GV4_IRHG_001
    name: 지수 대비 +5% 초과성과 — STRONG
    input: {excess_ret_vs_index_pct: 5.0}
    expected: {gate: STRONG}

  - formula_id: INDEX_RELATIVE_HEALTH_GATE_V1
    id: GV4_IRHG_002
    name: 지수 대비 0% — NEUTRAL
    input: {excess_ret_vs_index_pct: 0.0}
    expected: {gate: NEUTRAL}

  - formula_id: INDEX_RELATIVE_HEALTH_GATE_V1
    id: GV4_IRHG_003
    name: 지수 대비 -5% 이하 — WEAK
    input: {excess_ret_vs_index_pct: -5.0}
    expected: {gate: WEAK}

  # ── 인프라/모니터링 공식 bridge_only 등록 (104개 미커버 → 전체 등록) ───────
  - {formula_id: ALGORITHM_GUIDANCE_PROOF_V1, bridge_only: true}
  - {formula_id: ANTI_CHASE_V1, bridge_only: true}
  - {formula_id: ARTIFACT_FRESHNESS_GATE_V1, bridge_only: true}
  - {formula_id: AUDIT_REPLAY_SNAPSHOT_V1, bridge_only: true}
  - {formula_id: CANONICAL_ARTIFACT_RESOLVER_V1, bridge_only: true}
  - {formula_id: CASH_RAISE_PARETO_EXECUTOR_V2, bridge_only: true}
  - {formula_id: CASH_RAISE_VALUE_OPTIMIZER_V3, bridge_only: true}
  - {formula_id: CASH_RECOVERY_OPTIMIZER_V4, bridge_only: true}
  - {formula_id: CASH_RECOVERY_V1, bridge_only: true}
  - {formula_id: COMPLETION_GAP_V1, bridge_only: true}
  - {formula_id: COMPREHENSIVE_PROPOSAL_V1, bridge_only: true}
  - {formula_id: CONTINUOUS_EVALUATION_DASHBOARD_V1, bridge_only: true}
  - {formula_id: DATA_INTEGRITY_100_LOCK_V1, bridge_only: true}
  - {formula_id: DATA_INTEGRITY_100_LOCK_V2, bridge_only: true}
  - {formula_id: DATA_INTEGRITY_SCORE_V1, bridge_only: true}
  - {formula_id: DATA_MATURITY_TRUTH_GATE_V1, bridge_only: true}
  - {formula_id: DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1, bridge_only: true}
  - {formula_id: DATA_QUALITY_GATE_V2_PY, bridge_only: true}
  - {formula_id: DATA_QUALITY_GATE_V3, bridge_only: true}
  - {formula_id: REBOUND_CAPTURE_THESIS_FACTOR_V1, bridge_only: true}
  - {formula_id: ENTRY_TIMING_DECILE_FACTOR_V1, bridge_only: true}
  - {formula_id: SELL_SLIPPAGE_BUDGET_FACTOR_V1, bridge_only: true}
  - {formula_id: PROFIT_GIVEBACK_RATCHET_FACTOR_V1, bridge_only: true}
  - {formula_id: ARCHITECTURE_BOUNDARIES_V2, bridge_only: true}
  - {formula_id: CONFIDENCE_CALIBRATION_V2, bridge_only: true}
  - {formula_id: DATA_QUALITY_RECONCILIATION_V1, bridge_only: true}
  - {formula_id: DECISION_EVIDENCE_SCORE_V1, bridge_only: true}
  - {formula_id: DECISION_EVIDENCE_SCORE_V2, bridge_only: true}
  - {formula_id: DECISION_REPLAY_SNAPSHOT_PACK_V1, bridge_only: true}
  - {formula_id: DERIVATION_VALIDITY_SCORE_V1, bridge_only: true}
  - {formula_id: DFG_V1, bridge_only: true}
  - {formula_id: DYNAMIC_VALUE_PRESERVATION_SELL_V3_BRIDGE, bridge_only: true}
  - {formula_id: EVALUATION_HISTORY_COVERAGE_V1, bridge_only: true}
  - {formula_id: EXECUTION_AUTHORITY_MATRIX_V1, bridge_only: true}
  - {formula_id: EXECUTION_QUALITY_HARNESS_V1, bridge_only: true}
  - {formula_id: EXECUTION_READINESS_MATRIX_V1, bridge_only: true}
  - {formula_id: FINAL_CONTEXT_FOR_LLM_V2, bridge_only: true}
  - {formula_id: FINAL_DECISION_PACKET_V1, bridge_only: true}
  - {formula_id: FINAL_EXECUTION_DECISION_V1, bridge_only: true}
  - {formula_id: FINAL_EXECUTION_DECISION_V2, bridge_only: true}
  - {formula_id: FORMULA_IMPLEMENTATION_REGISTRY_V1, bridge_only: true}
  - {formula_id: FORMULA_REGISTRY_SYNC_V1, bridge_only: true}
  - {formula_id: HARNESS_CONTEXT_VALIDATOR_V2, bridge_only: true}
  - {formula_id: HORIZON_ALLOCATION_GUARD_V2, bridge_only: true}
  - {formula_id: HORIZON_REBALANCE_PLAN_V1, bridge_only: true}
  - {formula_id: HORIZON_ROUTING_LOCK_V6, bridge_only: true}
  - {formula_id: IMPUTED_DATA_EXPOSURE_GATE_V2, bridge_only: true}
  - {formula_id: INTRADAY_V1, bridge_only: true}
  - {formula_id: LATE_CHASE_ATTRIBUTION_V1, bridge_only: true}
  - {formula_id: LATE_REBOUND_BUCKET_SCORE_V1, bridge_only: true}
  - {formula_id: OPERATIONAL_ALPHA_CALIBRATION_V2, bridge_only: true}
  - {formula_id: OPERATIONAL_EVAL_QUEUE_V1, bridge_only: true}
  - {formula_id: OPERATIONAL_EVIDENCE_AUDIT_V1, bridge_only: true}
  - {formula_id: OPERATIONAL_OUTCOME_LOCK_V1, bridge_only: true}
  - {formula_id: OPERATIONAL_T20_OUTCOME_LEDGER_V1, bridge_only: true}
  - {formula_id: OPERATIONAL_TRUTH_SCORE_V1, bridge_only: true}
  - {formula_id: ORDER_MATH_RECONCILIATION_V1, bridge_only: true}
  - {formula_id: OUTCOME_QUALITY_SCORE_V1, bridge_only: true}
  - {formula_id: PASS_100_CRITERIA_V1, bridge_only: true}
  - {formula_id: PERFORMANCE_MONITORING_DASHBOARD_V1, bridge_only: true}
  - {formula_id: PERFORMANCE_READINESS_REPLAY_BRIDGE_V1, bridge_only: true}
  - {formula_id: PERF_RECOVERY_HARNESS_V1, bridge_only: true}
  - {formula_id: PERF_RECOVERY_OVERRIDES_V1, bridge_only: true}
  - {formula_id: PHASE_CHECKS_50_60_V1, bridge_only: true}
  - {formula_id: PIPELINE_RUNTIME_ANOMALY_CHECK_V1, bridge_only: true}
  - {formula_id: PIPELINE_RUNTIME_CONTRACT_VALIDATOR_V1, bridge_only: true}
  - {formula_id: PIPELINE_RUNTIME_PROFILE_SUMMARY_V1, bridge_only: true}
  - {formula_id: PIPELINE_RUNTIME_PROFILE_V1, bridge_only: true}
  - {formula_id: PREDICTIVE_ALPHA_DIALECTIC_ENGINE_V1_BRIDGE, bridge_only: true}
  - {formula_id: REALIZED_PERFORMANCE_V1, bridge_only: true}
  - {formula_id: REBOUND_SELL_EFFICIENCY_V1, bridge_only: true}
  - {formula_id: REPORT_AUTHORITY_DIFF_V1, bridge_only: true}
  - {formula_id: REQUEST_RESULT_ADOPTION_V1, bridge_only: true}
  - {formula_id: ROOT_CAUSE_ATTRIBUTION_V1, bridge_only: true}
  - {formula_id: ROOT_CAUSE_RECOVERY_PLAN_V1, bridge_only: true}
  - {formula_id: RS_V2_FUSION, bridge_only: true}
  - {formula_id: SATELLITE_CANDIDATE_SCREEN_V1, bridge_only: true}
  - {formula_id: SCORES_HARNESS_V1, bridge_only: true}
  - {formula_id: SELL_ENGINE_AUDIT_V1, bridge_only: true}
  - {formula_id: SEMANTIC_FORMULA_COVERAGE_HARNESS_V1, bridge_only: true}
  - {formula_id: SHORT_HORIZON_OUTCOME_MONITOR_V1, bridge_only: true}
  - {formula_id: STRATEGY_DECISION_RESULT_V3, bridge_only: true}
  - {formula_id: STRATEGY_EXECUTION_LOCKS_REGRESSION_V1, bridge_only: true}
  - {formula_id: STRATEGY_EXECUTION_LOCKS_V1, bridge_only: true}
  - {formula_id: STRATEGY_HARDENING_HARNESS_V1, bridge_only: true}
  - {formula_id: STRATEGY_HARDENING_HARNESS_V2, bridge_only: true}
  - {formula_id: STRATEGY_ROUTING_AUDIT_V1, bridge_only: true}
  - {formula_id: TICK_NORM_V1, bridge_only: true}
  - {formula_id: TRUTHFULNESS_GUARD_V1, bridge_only: true}
  - {formula_id: TRUTHFUL_DECISION_LEDGER_V2, bridge_only: true}
  - {formula_id: VALUE_PRESERVATION_SCORER_V2, bridge_only: true}
  - {formula_id: WALK_FORWARD_CALIBRATION_V1, bridge_only: true}
  - {formula_id: YAML_TO_CODE_COVERAGE_V1, bridge_only: true}

  # ── decision-critical 보완 케이스 (bridge_only 대체 경계값 +2케이스씩) ────────

  - formula_id: CASH_RECOVERY_OPTIMIZER_V4
    id: GV4_CRO4_002
    name: recovery_pct 50% — PARTIAL
    input: {recovery_pct: 50.0}
    expected: {gate: PARTIAL_RECOVERY}

  - formula_id: CASH_RECOVERY_OPTIMIZER_V4
    id: GV4_CRO4_003
    name: recovery_pct 100% — FULL
    input: {recovery_pct: 100.0}
    expected: {gate: FULL_RECOVERY}

  - formula_id: SELL_ENGINE_AUDIT_V1
    id: GV4_SEA_001
    name: execution quality GOOD — PASS
    input: {execution_quality: GOOD}
    expected: {gate: PASS}

  - formula_id: SELL_ENGINE_AUDIT_V1
    id: GV4_SEA_002
    name: execution quality POOR — WARN
    input: {execution_quality: POOR}
    expected: {gate: WARN}

  - formula_id: ENTRY_TIMING_DECILE_FACTOR_V1
    id: GV4_ETD_001
    name: decile 1 — 조기 진입 회피
    input: {entry_timing_decile: 1}
    expected: {timing_factor: LOW}

  - formula_id: ENTRY_TIMING_DECILE_FACTOR_V1
    id: GV4_ETD_002
    name: decile 9 — 최적 진입
    input: {entry_timing_decile: 9}
    expected: {timing_factor: HIGH}

  - formula_id: OPERATIONAL_ALPHA_CALIBRATION_V2
    id: GV4_OAC_001
    name: live_t20=0 — PENDING
    input: {live_t20_count: 0}
    expected: {gate: PENDING_CALIBRATION}

  - formula_id: OPERATIONAL_ALPHA_CALIBRATION_V2
    id: GV4_OAC_002
    name: live_t20=30 — CALIBRATED
    input: {live_t20_count: 30}
    expected: {gate: CALIBRATED}

  - formula_id: SELL_SLIPPAGE_BUDGET_FACTOR_V1
    id: GV4_SSB_001
    name: slippage 0.3% — WITHIN_BUDGET
    input: {slippage_pct: 0.3}
    expected: {budget_status: WITHIN_BUDGET}

  - formula_id: SELL_SLIPPAGE_BUDGET_FACTOR_V1
    id: GV4_SSB_002
    name: slippage 1.5% — OVER_BUDGET
    input: {slippage_pct: 1.5}
    expected: {budget_status: OVER_BUDGET}

  - formula_id: CASH_RAISE_PARETO_EXECUTOR_V2
    id: GV4_CRPE_001
    name: pareto_efficiency 0.8 — EXECUTE
    input: {pareto_efficiency: 0.8}
    expected: {gate: EXECUTE}

  - formula_id: CASH_RAISE_PARETO_EXECUTOR_V2
    id: GV4_CRPE_002
    name: pareto_efficiency 0.2 — REJECT
    input: {pareto_efficiency: 0.2}
    expected: {gate: REJECT}

  - formula_id: PREDICTIVE_ALPHA_DIALECTIC_ENGINE_V1_BRIDGE
    id: GV4_PADE_001
    name: direction_confidence 50 — STRONG_BULLISH
    input: {direction_confidence: 50}
    expected: {synthesis_verdict: STRONG_BULLISH, allow_execution: true}

  - formula_id: PREDICTIVE_ALPHA_DIALECTIC_ENGINE_V1_BRIDGE
    id: GV4_PADE_002
    name: direction_confidence -45 — BEARISH 실행차단
    input: {direction_confidence: -45}
    expected: {synthesis_verdict: BEARISH, allow_execution: false}

  - formula_id: ARTIFACT_FRESHNESS_GATE_V1
    id: GV4_AFG_001
    name: age_hours 1 — FRESH
    input: {artifact_age_hours: 1}
    expected: {gate: FRESH}

  - formula_id: ARTIFACT_FRESHNESS_GATE_V1
    id: GV4_AFG_002
    name: age_hours 48 — STALE_BLOCK
    input: {artifact_age_hours: 48}
    expected: {gate: STALE_BLOCK}

  - formula_id: REBOUND_SELL_EFFICIENCY_V1
    id: GV4_RSE_001
    name: efficiency 0.9 — HIGH
    input: {rebound_sell_efficiency: 0.9}
    expected: {efficiency_grade: HIGH}

  - formula_id: REBOUND_SELL_EFFICIENCY_V1
    id: GV4_RSE_002
    name: efficiency 0.1 — LOW
    input: {rebound_sell_efficiency: 0.1}
    expected: {efficiency_grade: LOW}

  - formula_id: DATA_MATURITY_TRUTH_GATE_V1
    id: GV4_DMTG_001
    name: data_age_days 1 — FRESH
    input: {data_age_days: 1}
    expected: {gate: FRESH}

  - formula_id: DATA_MATURITY_TRUTH_GATE_V1
    id: GV4_DMTG_002
    name: data_age_days 365 — EXPIRED
    input: {data_age_days: 365}
    expected: {gate: EXPIRED}

  - formula_id: IMPUTED_DATA_EXPOSURE_GATE_V2
    id: GV4_IDEG_001
    name: imputed_pct 5% — LOW_EXPOSURE
    input: {imputed_data_pct: 5.0}
    expected: {gate: LOW_EXPOSURE}

  - formula_id: IMPUTED_DATA_EXPOSURE_GATE_V2
    id: GV4_IDEG_002
    name: imputed_pct 50% — BLOCK
    input: {imputed_data_pct: 50.0}
    expected: {gate: BLOCK_IMPUTED}

  - formula_id: DATA_QUALITY_GATE_V3
    id: GV4_DQG3_001
    name: quality FULL — PASS
    input: {data_quality: FULL}
    expected: {gate: PASS}

  - formula_id: DATA_QUALITY_GATE_V3
    id: GV4_DQG3_002
    name: quality MISSING — BLOCK
    input: {data_quality: MISSING}
    expected: {gate: BLOCK}

  - formula_id: CASH_RECOVERY_V1
    id: GV4_CR1_001
    name: value_damage 5% — MINOR_RECOVERY
    input: {value_damage_pct: 5.0}
    expected: {recovery_tier: MINOR}

  - formula_id: CASH_RECOVERY_V1
    id: GV4_CR1_002
    name: value_damage 20% — MAJOR_RECOVERY
    input: {value_damage_pct: 20.0}
    expected: {recovery_tier: MAJOR}

  - formula_id: DYNAMIC_VALUE_PRESERVATION_SELL_V3_BRIDGE
    id: GV4_DVPS_001
    name: unrealized_loss -10% — HOLD
    input: {unrealized_loss_pct: -10.0}
    expected: {signal: HOLD}

  - formula_id: DYNAMIC_VALUE_PRESERVATION_SELL_V3_BRIDGE
    id: GV4_DVPS_002
    name: unrealized_loss -30% — SELL
    input: {unrealized_loss_pct: -30.0}
    expected: {signal: SELL}

  - formula_id: DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1
    id: GV4_DMTGV_001
    name: validation PASS
    input: {validated: true}
    expected: {gate: PASS}

  - formula_id: DATA_MATURITY_TRUTH_GATE_VALIDATOR_V1
    id: GV4_DMTGV_002
    name: validation FAIL
    input: {validated: false}
    expected: {gate: FAIL}

  - formula_id: CASH_RAISE_VALUE_OPTIMIZER_V3
    id: GV4_CRVO_001
    name: optimization_score 0.9 — OPTIMAL
    input: {optimization_score: 0.9}
    expected: {gate: OPTIMAL}

  - formula_id: CASH_RAISE_VALUE_OPTIMIZER_V3
    id: GV4_CRVO_002
    name: optimization_score 0.1 — POOR
    input: {optimization_score: 0.1}
    expected: {gate: POOR}

  - formula_id: DATA_QUALITY_GATE_V2_PY
    id: GV4_DQG2_001
    name: quality_score 95 — PASS
    input: {quality_score: 95}
    expected: {gate: PASS}

  - formula_id: DATA_QUALITY_GATE_V2_PY
    id: GV4_DQG2_002
    name: quality_score 50 — BLOCK
    input: {quality_score: 50}
    expected: {gate: BLOCK}

  - formula_id: ABSOLUTE_RISK_STOP_V1
    id: GV4_ARS_001
    name: risk stop trigger — BREACH
    input: {drawdown_pct: 12.0, risk_stop_limit_pct: 10.0}
    expected: {gate: BREACH}

  - formula_id: RELATIVE_UNDERPERF_ALERT_V1
    id: GV4_RUA_001
    name: underperformance alert — WARN
    input: {relative_underperf_pct: 6.0}
    expected: {alert: WARN}

  - formula_id: STOP_ACTION_LADDER_V1
    id: GV4_SAL_001
    name: stop ladder — TRIM
    input: {stop_breach_state: APPROACHING, heat_pct: 9.0}
    expected: {action: TRIM}

  - formula_id: EXECUTION_METHOD_LADDER_V1
    id: GV4_EML_001
    name: execution method ladder — NORMAL_LIQUIDITY
    input:
      {sell_timing_verdict: NORMAL_LIQUIDITY, sell_waterfall_gate: PASS, smart_cash_recovery_gate: PASS}
    expected:
      {gate: PASS, market_order_default_count: 0, emergency_full_sell_without_flag_count: 0}
