schema_version: release_dag.v3 step_count: 104 goal: Linearize package.json scripts into a validated DAG execution graph. has_code_implementation: true code_path: "tools/run_release_dag_v3.py" execution_order: # 토폴로지 정렬 기준 병렬 실행 wave (의존성 없는 노드들을 동시에 실행 가능) wave_0: - audit_entropy - build_bundle - build_gas_bundle - build_macro_event_ticker_impact - build_engine_health_card - build_late_chase_attribution - build_live_replay_separation - build_module_io_coverage - build_operating_cadence_signal - build_profit_giveback_ratchet - build_schema_models - build_shadow_ledger - convert_xlsx - validate_active_manifest - validate_agents_shrink - validate_docs_no_formula_duplication - validate_calibration - validate_cash_ledger - validate_change_requests - validate_completion_harness_instructions - validate_factor_lifecycle - validate_factor_lifecycle_registry_v1 - validate_factor_lifecycle_completeness - validate_field_dict - validate_gas_adapter - validate_gas_adapter_contract - validate_golden_coverage - validate_live_activation - validate_metric_alias_collision - validate_packaged_refs - validate_property_invariants - validate_renderer_no_calc - validate_runtime_source_whitelist - validate_sector_universe_monthly_refresh - validate_specs wave_1: - validate_gas_bundle_sync - build_anti_whipsaw_gate - build_data_gated_progress - build_ejce_view_renderer - build_etf_representative_monitor - build_factor_shadow_eligibility - build_formula_outputs - build_sector_flow_history_progress - build_realized_performance - build_missing_formula_bridge - build_ratchet_trailing_general - build_rebalance_sheet - build_regime_trim_guidance - build_routing_execution_log - build_sector_trend_analysis - build_shadow_promotion - build_value_preservation_scorer - build_velocity - validate_anti_late_entry - validate_engine_health_card - validate_module_io_coverage - validate_no_replay_live_mix - validate_realized_performance - validate_rule_lifecycle - validate_schema_model wave_2: - build_smart_cash_recovery_v3 - build_time_stop_forecast - inject_harness - validate_artifact_sync - validate_no_lookahead wave_3: - apply_strategy_execution_locks - build_strategy_routing_audit - finalize_packet wave_4: - build_final_decision - build_horizon_rebalance_plan - validate_decision_trace - validate_execution_sim - validate_factor_conflicts wave_5: - build_final_context - build_provenance_ledger - build_report - update_proposal_evaluation_history - build_operational_eval_queue - build_operational_outcome_lock wave_6: - build_algorithm_guidance_proof - build_artifact_chain_hash - build_calibration_priority - build_calibration_change_ledger - build_calibration_review_report - build_calibration_approval_list - build_calibration_decision_draft - build_alpha_feedback_loop - build_honest_proof_gap_analyzer - build_operational_alpha_calibration - build_prediction_accuracy_harness - validate_data_gated_progress - validate_sector_flow_history_progress - validate_json_generator_outputs - validate_alpha_feedback_loop - validate_llm_copy_only - validate_llm_determinism - validate_llm_regression - validate_low_capability - validate_low_capability_pipeline_todo_v2 - validate_execution_precedence_lock_v2 - validate_order_grammar_v1 - validate_provenance - validate_prediction_accuracy_harness - validate_operational_alpha_calibration - validate_render_diff - validate_report_numeric_consistency - validate_report_section_completeness - validate_report_sync wave_7: - build_architecture_boundaries - validate_artifact_chain_hash wave_8: - validate_architecture_boundaries wave_9: - prepare_zip dag: nodes: build_gas_bundle: id: build_gas_bundle command: ["python", "tools/build_gas_bundle_v1.py"] inputs: - "tools/build_gas_bundle_v1.py" - "src/gas/core/gas_lib.gs" - "src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs" - "src/gas_adapter_parts/gdc_02_account_satellite.gs" - "src/gas_adapter_parts/gdf_01_price_metrics.gs" - "src/gas_adapter_parts/gdf_02_harness_assembly.gs" - "src/gas_adapter_parts/gdf_03_portfolio_gates.gs" - "src/gas_adapter_parts/gdf_04_execution_quality.gs" - "src/gas_adapter_parts/gdf_05_alpha_engines.gs" - "src/gas_adapter_parts/gdf_06_rebalance.gs" outputs: - "gas_lib.gs" - "gas_data_collect.gs" - "gas_data_feed.gs" depends_on: [] timeout_sec: 30 cache_key: "build_gas_bundle_v1" strict: true artifact_policy: "keep" validate_gas_adapter_contract: id: validate_gas_adapter_contract command: ["python", "tools/validate_gas_adapter_contract_v1.py"] inputs: - "tools/validate_gas_adapter_contract_v1.py" - "spec/gas_adapter_contract.yaml" - "schemas/generated/gas_adapter_contract.schema.json" - "spec/14_raw_workbook_mapping.yaml" - "spec/15_account_snapshot_contract.yaml" outputs: - "Temp/gas_adapter_contract_validation_v1.json" depends_on: [] timeout_sec: 30 cache_key: "validate_gas_adapter_contract_v1" strict: true artifact_policy: "keep" validate_gas_bundle_sync: id: validate_gas_bundle_sync command: ["python", "tools/validate_gas_bundle_sync_v1.py"] inputs: - "tools/validate_gas_bundle_sync_v1.py" - "gas_lib.gs" - "gas_data_collect.gs" - "gas_data_feed.gs" - "src/gas/core/gas_lib.gs" - "src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs" - "src/gas_adapter_parts/gdc_02_account_satellite.gs" - "src/gas_adapter_parts/gdf_01_price_metrics.gs" - "src/gas_adapter_parts/gdf_02_harness_assembly.gs" - "src/gas_adapter_parts/gdf_03_portfolio_gates.gs" - "src/gas_adapter_parts/gdf_04_execution_quality.gs" - "src/gas_adapter_parts/gdf_05_alpha_engines.gs" - "src/gas_adapter_parts/gdf_06_rebalance.gs" outputs: - "Temp/gas_bundle_validation_v1.json" depends_on: ["build_gas_bundle"] timeout_sec: 30 cache_key: "validate_gas_bundle_sync_v1" strict: true artifact_policy: "keep" convert_xlsx: id: convert_xlsx command: ["python", "tools/convert_xlsx_to_json.py"] inputs: ["GatherTradingData.xlsx"] outputs: ["GatherTradingData.json"] depends_on: [] timeout_sec: 30 cache_key: "convert_xlsx_v1" strict: true artifact_policy: "keep" build_macro_event_ticker_impact: id: build_macro_event_ticker_impact command: ["python", "tools/build_macro_event_ticker_impact_v1.py"] inputs: ["tools/build_macro_event_ticker_impact_v1.py", "GatherTradingData.json"] outputs: ["Temp/macro_event_ticker_impact_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_macro_event_ticker_impact_v1" strict: false artifact_policy: "keep" note: "core_satellite 종목별 매크로 이벤트 임팩트 레지스터 — MACRO_EVENT_TICKER_IMPACT_V1" build_formula_outputs: id: build_formula_outputs command: ["python", "src/quant_engine/compute_formula_outputs.py", "--output", "Temp/computed_harness_v1.json"] inputs: ["src/quant_engine/compute_formula_outputs.py", "GatherTradingData.json"] outputs: ["Temp/computed_harness_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_formula_outputs_v1" strict: true artifact_policy: "keep" build_data_gated_progress: id: build_data_gated_progress command: ["python", "tools/build_data_gated_progress_v1.py"] inputs: ["tools/build_data_gated_progress_v1.py", "GatherTradingData.json"] outputs: ["Temp/data_gated_progress_v1.json"] depends_on: ["build_live_replay_separation"] timeout_sec: 30 cache_key: "build_data_gated_progress_v1" strict: false artifact_policy: "keep" note: "DATA_GATED 항목별 실측 진척도 — non-blocking diagnostic" validate_data_gated_progress: id: validate_data_gated_progress command: ["python", "tools/validate_data_gated_progress_v1.py"] inputs: ["tools/validate_data_gated_progress_v1.py", "Temp/data_gated_progress_v1.json"] outputs: ["Temp/validate_data_gated_progress_v1.json"] depends_on: ["build_data_gated_progress"] timeout_sec: 30 cache_key: "validate_data_gated_progress_v1" strict: true artifact_policy: "keep" note: "WBS-4.x DATA_GATED 진척도 계약 검증" build_sector_flow_history_progress: id: build_sector_flow_history_progress command: ["python", "tools/build_sector_flow_history_progress_v1.py"] inputs: ["tools/build_sector_flow_history_progress_v1.py", "GatherTradingData.json"] outputs: ["Temp/sector_flow_history_progress_v1.json"] depends_on: ["build_data_gated_progress"] timeout_sec: 30 cache_key: "build_sector_flow_history_progress_v1" strict: false artifact_policy: "keep" note: "WBS-2.5 sector_flow_history 30일 누적 진척도 — non-blocking diagnostic" build_realized_performance: id: build_realized_performance command: ["python", "tools/build_realized_performance_v1.py"] inputs: ["tools/build_realized_performance_v1.py", "GatherTradingData.json", "Temp/proposal_evaluation_history.json"] outputs: ["Temp/realized_performance_v1.json"] depends_on: ["build_data_gated_progress"] timeout_sec: 30 cache_key: "build_realized_performance_v1" strict: false artifact_policy: "keep" note: "WBS-4.1 realized performance replay summary — non-blocking diagnostic" build_prediction_accuracy_harness: id: build_prediction_accuracy_harness command: ["python", "tools/build_prediction_accuracy_harness_v2.py"] inputs: ["tools/build_prediction_accuracy_harness_v2.py", "Temp/proposal_evaluation_history.json"] outputs: ["Temp/prediction_accuracy_harness_v2.json"] depends_on: ["update_proposal_evaluation_history"] timeout_sec: 30 cache_key: "build_prediction_accuracy_harness_v2" strict: false artifact_policy: "keep" note: "WBS-4.2 prediction accuracy harness — non-blocking diagnostic" build_alpha_feedback_loop: id: build_alpha_feedback_loop command: ["python", "tools/build_alpha_feedback_loop_v2.py"] inputs: ["tools/build_alpha_feedback_loop_v2.py", "Temp/proposal_evaluation_history.json"] outputs: ["Temp/alpha_feedback_loop_v2.json"] depends_on: ["update_proposal_evaluation_history"] timeout_sec: 30 cache_key: "build_alpha_feedback_loop_v2" strict: false artifact_policy: "keep" note: "WBS-4.3 alpha feedback loop — non-blocking diagnostic" build_calibration_priority: id: build_calibration_priority command: ["python", "tools/build_calibration_priority_v1.py"] inputs: ["tools/build_calibration_priority_v1.py", "Temp/alpha_feedback_loop_v2.json", "spec/calibration_registry.yaml"] outputs: ["Temp/calibration_priority_v1.json"] depends_on: ["build_alpha_feedback_loop"] timeout_sec: 30 cache_key: "build_calibration_priority_v1" strict: false artifact_policy: "keep" note: "CALIBRATION_PRIORITY_V1 — registry warning fallback 포함 보정 우선순위 리포트" build_calibration_change_ledger: id: build_calibration_change_ledger command: ["python", "tools/build_calibration_change_ledger_v4.py"] inputs: ["tools/build_calibration_change_ledger_v4.py", "Temp/calibration_priority_v1.json", "Temp/outcome_ledger_v1.json", "Temp/calibration_registry_v1.json"] outputs: ["Temp/calibration_change_ledger_v4.json"] depends_on: ["build_calibration_priority", "build_realized_performance"] timeout_sec: 30 cache_key: "build_calibration_change_ledger_v4" strict: false artifact_policy: "keep" note: "CALIBRATION_CHANGE_LEDGER_V4 — change ledger linkage 유지" build_calibration_review_report: id: build_calibration_review_report command: ["python", "tools/build_calibration_review_report_v1.py"] inputs: ["tools/build_calibration_review_report_v1.py", "Temp/calibration_priority_v1.json", "Temp/calibration_change_ledger_v4.json", "spec/calibration_registry.yaml"] outputs: ["Temp/calibration_review_report_v1.json", "Temp/calibration_review_report_v1.md"] depends_on: ["build_calibration_change_ledger"] timeout_sec: 30 cache_key: "build_calibration_review_report_v1" strict: false artifact_policy: "keep" note: "CALIBRATION_REVIEW_REPORT_V1 — 월간 운영용 읽기 쉬운 보정 리포트" build_calibration_approval_list: id: build_calibration_approval_list command: ["python", "tools/build_calibration_approval_list_v1.py"] inputs: ["tools/build_calibration_approval_list_v1.py", "Temp/calibration_review_report_v1.json"] outputs: ["Temp/calibration_approval_list_v1.json", "Temp/calibration_approval_list_v1.md"] depends_on: ["build_calibration_review_report"] timeout_sec: 30 cache_key: "build_calibration_approval_list_v1" strict: false artifact_policy: "keep" note: "CALIBRATION_APPROVAL_LIST_V1 — PROVISIONAL 승인/검토 분리" build_calibration_decision_draft: id: build_calibration_decision_draft command: ["python", "tools/build_calibration_decision_draft_v1.py"] inputs: ["tools/build_calibration_decision_draft_v1.py", "Temp/calibration_review_report_v1.json", "Temp/calibration_approval_list_v1.json"] outputs: ["Temp/calibration_decision_draft_v1.json", "Temp/calibration_decision_draft_v1.md"] depends_on: ["build_calibration_approval_list"] timeout_sec: 30 cache_key: "build_calibration_decision_draft_v1" strict: false artifact_policy: "keep" note: "CALIBRATION_DECISION_DRAFT_V1 — APPROVE/HOLD/REJECT 초안" build_operational_alpha_calibration: id: build_operational_alpha_calibration command: ["python", "tools/build_operational_alpha_calibration_v2.py"] inputs: ["tools/build_operational_alpha_calibration_v2.py", "Temp/outcome_quality_score_v1.json", "Temp/prediction_accuracy_harness_v2.json", "Temp/trade_quality_from_t5_v1.json", "Temp/smart_cash_recovery_v5.json"] outputs: ["Temp/operational_alpha_calibration_v2.json"] depends_on: ["build_prediction_accuracy_harness", "build_alpha_feedback_loop", "build_realized_performance"] timeout_sec: 30 cache_key: "build_operational_alpha_calibration_v2" strict: false artifact_policy: "keep" note: "WBS-4.3 operational alpha calibration — non-blocking diagnostic" build_factor_shadow_eligibility: id: build_factor_shadow_eligibility command: ["python", "tools/build_factor_shadow_eligibility_v1.py"] inputs: ["tools/build_factor_shadow_eligibility_v1.py", "GatherTradingData.json", "spec/factor_lifecycle_registry.yaml"] outputs: ["Temp/factor_shadow_eligibility_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_factor_shadow_eligibility_v1" strict: false artifact_policy: "keep" note: "149개 팩터 shadow 승격 자격 평가 — non-blocking diagnostic" build_ejce_view_renderer: id: build_ejce_view_renderer command: ["python", "tools/build_ejce_view_renderer_v1.py"] inputs: ["tools/build_ejce_view_renderer_v1.py", "GatherTradingData.json"] outputs: ["Temp/ejce_view_renderer_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_ejce_view_renderer_v1" strict: false artifact_policy: "keep" note: "phase1_gate: blank_view_count=0 검증" build_ratchet_trailing_general: id: build_ratchet_trailing_general command: ["python", "tools/build_ratchet_trailing_general_v1.py"] inputs: ["tools/build_ratchet_trailing_general_v1.py", "GatherTradingData.json"] outputs: ["Temp/ratchet_trailing_general_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_ratchet_trailing_general_v1" strict: false artifact_policy: "keep" note: "phase1_gate: profit ratchet coverage_pct >= 99 검증" build_anti_whipsaw_gate: id: build_anti_whipsaw_gate command: ["python", "tools/build_anti_whipsaw_gate_v1.py"] inputs: ["tools/build_anti_whipsaw_gate_v1.py", "GatherTradingData.json"] outputs: ["Temp/anti_whipsaw_gate_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_anti_whipsaw_gate_v1" strict: false artifact_policy: "keep" note: "ANTI_WHIPSAW_GATE_V1 — anti_whipsaw_status 스칼라 추출 (anti_whipsaw_gate_json)" build_velocity: id: build_velocity command: ["python", "tools/build_velocity_v1.py"] inputs: ["tools/build_velocity_v1.py", "GatherTradingData.json"] outputs: ["Temp/velocity_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_velocity_v1" strict: false artifact_policy: "keep" note: "VELOCITY_V1 — velocity_1d/velocity_5d 포트폴리오 중앙값 집계 (anti_late_entry_json)" build_regime_trim_guidance: id: build_regime_trim_guidance command: ["python", "tools/build_regime_trim_guidance_v1.py"] inputs: ["tools/build_regime_trim_guidance_v1.py", "GatherTradingData.json"] outputs: ["Temp/regime_trim_guidance_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_regime_trim_guidance_v1" strict: false artifact_policy: "keep" note: "REGIME_TRIM_GUIDANCE_V1 — regime_trim_guidance 딕셔너리 추출 (regime_trim_guidance_json)" build_missing_formula_bridge: id: build_missing_formula_bridge command: ["python", "tools/build_missing_formula_bridge_v1.py"] inputs: ["tools/build_missing_formula_bridge_v1.py"] outputs: ["Temp/missing_formula_bridge_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_missing_formula_bridge_v1" strict: false artifact_policy: "keep" note: "MISSING_FORMULA_BRIDGE_V1 — 10개 공식 커버리지 앵커 등록 (harness auditor PY_FILES)" build_sector_trend_analysis: id: build_sector_trend_analysis command: ["python", "tools/build_sector_trend_analysis_v1.py"] inputs: ["tools/build_sector_trend_analysis_v1.py", "GatherTradingData.json"] outputs: ["Temp/sector_trend_analysis_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_sector_trend_analysis_v1" strict: false artifact_policy: "keep" note: "SECTOR_TREND_ANALYSIS_V1 — ETF proxy 기반 섹터 동향 + smart money 렌즈 집계" build_etf_representative_monitor: id: build_etf_representative_monitor command: ["python", "tools/build_etf_representative_monitor_v1.py"] inputs: ["tools/build_etf_representative_monitor_v1.py", "GatherTradingData.json"] outputs: ["Temp/etf_representative_monitor_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_etf_representative_monitor_v1" strict: false artifact_policy: "keep" note: "ETF_REPRESENTATIVE_MONITOR_V1 — ETF 대표 종목 추적 + 벤치마크 연동" build_routing_execution_log: id: build_routing_execution_log command: ["python", "tools/build_routing_execution_log_v1.py"] inputs: ["tools/build_routing_execution_log_v1.py", "GatherTradingData.json"] outputs: ["Temp/routing_execution_log_v1.json", "Temp/routing_execution_log_table_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_routing_execution_log_v1" strict: false artifact_policy: "keep" note: "phase1_gate: routing decision path completeness + stage_coverage_pct/request_route" build_value_preservation_scorer: id: build_value_preservation_scorer command: ["python", "tools/build_value_preservation_scorer_v1.py"] inputs: ["tools/build_value_preservation_scorer_v1.py", "GatherTradingData.json"] outputs: ["Temp/value_preservation_scorer_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_value_preservation_scorer_v1" strict: false artifact_policy: "keep" note: "phase1_gate: value preservation gate=PASS/CAUTION/WATCH_PENDING_SAMPLE" build_smart_cash_recovery_v3: id: build_smart_cash_recovery_v3 command: ["python", "tools/build_smart_cash_recovery_v3.py"] inputs: ["tools/build_smart_cash_recovery_v3.py", "GatherTradingData.json", "Temp/value_preservation_scorer_v1.json"] outputs: ["Temp/smart_cash_recovery_v3.json"] depends_on: ["build_value_preservation_scorer"] timeout_sec: 30 cache_key: "build_smart_cash_recovery_v3" strict: false artifact_policy: "keep" note: "phase1_gate: smart cash recovery V3 gate=PASS/CAUTION" build_algorithm_guidance_proof: id: build_algorithm_guidance_proof command: ["python", "tools/build_algorithm_guidance_proof_v1.py"] inputs: ["tools/build_algorithm_guidance_proof_v1.py", "GatherTradingData.json", "Temp/operational_report.json", "Temp/ejce_view_renderer_v1.json", "Temp/ratchet_trailing_general_v1.json", "Temp/value_preservation_scorer_v1.json", "Temp/smart_cash_recovery_v3.json", "Temp/routing_execution_log_v1.json", "Temp/canonical_metrics_v1.json"] outputs: ["Temp/algorithm_guidance_proof_v1.json"] depends_on: ["build_report", "build_ejce_view_renderer", "build_ratchet_trailing_general", "build_value_preservation_scorer", "build_smart_cash_recovery_v3", "build_routing_execution_log", "build_operational_outcome_lock"] timeout_sec: 30 cache_key: "build_algorithm_guidance_proof_v1" strict: false artifact_policy: "keep" note: "honest_proof_score + phase1_gate 7개 검증 — RELEASE_GATE_TRUTH 원천" build_rebalance_sheet: id: build_rebalance_sheet command: ["python", "tools/build_rebalance_engine_v1.py", "--json", "GatherTradingData.json", "--harness", "Temp/computed_harness_v1.json"] inputs: ["tools/build_rebalance_engine_v1.py", "GatherTradingData.json"] outputs: ["Temp/rebalance_engine_v1.json"] depends_on: ["convert_xlsx"] timeout_sec: 30 cache_key: "build_rebalance_engine_v1" strict: false artifact_policy: "keep" note: "computed_harness_v1.json 없으면 regime=NEUTRAL fallback — WARN 허용" inject_harness: id: inject_harness command: ["python", "src/quant_engine/inject_computed_harness.py", "GatherTradingData.json", "--output", "Temp/final_decision_packet_active.json"] inputs: ["src/quant_engine/inject_computed_harness.py", "GatherTradingData.json", "Temp/computed_harness_v1.json"] outputs: ["Temp/final_decision_packet_active.json"] depends_on: ["build_formula_outputs"] timeout_sec: 30 cache_key: "inject_harness_v1" strict: true artifact_policy: "keep" apply_strategy_execution_locks: id: apply_strategy_execution_locks command: ["python", "tools/apply_strategy_execution_locks.py"] inputs: ["tools/apply_strategy_execution_locks.py", "GatherTradingData.json", "Temp/late_chase_attribution_v1.json", "Temp/data_integrity_score_v1.json", "Temp/derivation_validity_score_v1.json", "Temp/decision_evidence_score_v1.json", "Temp/outcome_quality_score_v1.json"] outputs: [] depends_on: ["inject_harness", "build_late_chase_attribution"] timeout_sec: 30 cache_key: "apply_strategy_execution_locks_v1" strict: false artifact_policy: "keep" note: "STRATEGY_EXECUTION_LOCKS_V1 필드를 GatherTradingData.json 하네스에 주입" finalize_packet: id: finalize_packet command: ["python", "tools/build_packet_from_context_v1.py"] inputs: ["tools/build_packet_from_context_v1.py", "Temp/final_decision_packet_active.json"] outputs: ["Temp/final_decision_packet_active.json"] depends_on: ["inject_harness"] timeout_sec: 30 cache_key: "finalize_packet_v1" strict: true artifact_policy: "keep" build_strategy_routing_audit: id: build_strategy_routing_audit command: ["python", "tools/build_strategy_routing_audit_v1.py"] inputs: ["tools/build_strategy_routing_audit_v1.py", "GatherTradingData.json", "Temp/horizon_classification_v1.json", "Temp/capital_style_allocation_v1.json"] outputs: ["Temp/strategy_routing_audit_v1.json"] depends_on: ["inject_harness"] timeout_sec: 30 cache_key: "build_strategy_routing_audit_v1" strict: false artifact_policy: "keep" note: "routing_gate 공식 산출 — MID/SHORT/LONG 호라이즌 상한 검증" build_horizon_rebalance_plan: id: build_horizon_rebalance_plan command: ["python", "tools/build_horizon_rebalance_plan_v1.py"] inputs: ["tools/build_horizon_rebalance_plan_v1.py", "GatherTradingData.json", "Temp/strategy_routing_audit_v1.json", "Temp/horizon_classification_v1.json"] outputs: ["Temp/horizon_rebalance_plan_v1.json"] depends_on: ["build_strategy_routing_audit", "finalize_packet"] timeout_sec: 30 cache_key: "build_horizon_rebalance_plan_v1" strict: false artifact_policy: "keep" note: "routing_gate FAIL 시 리밸런싱 우선순위 플랜 산출 — non-blocking" audit_entropy: id: audit_entropy command: ["python", "tools/audit_repository_entropy_v2.py", "--out", "runtime/refactor_baseline_v1.yaml"] inputs: ["tools/audit_repository_entropy_v2.py"] outputs: ["runtime/refactor_baseline_v1.yaml"] depends_on: [] timeout_sec: 30 cache_key: "audit_entropy_v1" strict: true artifact_policy: "keep" validate_specs: id: validate_specs command: ["python", "tools/validate_specs.py"] inputs: ["tools/validate_specs.py", "spec/13_formula_registry.yaml"] outputs: [] depends_on: [] timeout_sec: 60 cache_key: "validate_specs_v1" strict: true artifact_policy: "keep" validate_no_direct_api_trading: id: validate_no_direct_api_trading command: ["python", "tools/validate_no_direct_api_trading_v1.py"] inputs: ["tools/validate_no_direct_api_trading_v1.py", "src/quant_engine/kis_api_client_v1.py", "governance/rules/06_no_direct_api_trading.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_no_direct_api_trading_v1" strict: true artifact_policy: "keep" note: "[CRITICAL] 매수/매도 API 직접 실행 절대 금지 게이트 — warn_only 불가, 완화 대상 아님(사용자 직접 지시 2026-06-21). 순수 stdlib만 사용해 Synology ARMv7 CI에서도 항상 실행 가능." validate_active_manifest: id: validate_active_manifest command: ["python", "tools/validate_active_manifest.py", "--manifest", "runtime/active_artifact_manifest.yaml", "--strict"] inputs: ["tools/validate_active_manifest.py", "runtime/active_artifact_manifest.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_active_manifest_v1" strict: true artifact_policy: "keep" validate_report_sync: id: validate_report_sync command: ["python", "tools/validate_report_packet_sync_v1.py", "--packet", "Temp/final_decision_packet_active.json", "--report", "Temp/operational_report.json"] inputs: ["tools/validate_report_packet_sync_v1.py", "Temp/final_decision_packet_active.json", "Temp/operational_report.json"] outputs: [] depends_on: ["build_report"] timeout_sec: 30 cache_key: "validate_report_sync_v1" strict: true artifact_policy: "keep" validate_report_numeric_consistency: id: validate_report_numeric_consistency command: ["python", "tools/validate_report_numeric_consistency_guard_v2.py", "--packet", "Temp/final_decision_packet_active.json", "--report", "Temp/operational_report.json"] inputs: ["tools/validate_report_numeric_consistency_guard_v2.py", "Temp/final_decision_packet_active.json", "Temp/operational_report.json"] outputs: [] depends_on: ["build_report"] timeout_sec: 30 cache_key: "validate_report_numeric_consistency_v1" strict: true artifact_policy: "keep" validate_report_section_completeness: id: validate_report_section_completeness command: ["python", "tools/validate_report_section_completeness_v1.py", "--report-json", "Temp/operational_report.json"] inputs: ["tools/validate_report_section_completeness_v1.py", "Temp/operational_report.json"] outputs: ["Temp/report_section_completeness.json"] depends_on: ["build_report"] timeout_sec: 30 cache_key: "validate_report_section_completeness_v1" strict: true artifact_policy: "keep" validate_json_generator_outputs: id: validate_json_generator_outputs command: ["python", "tools/validate_json_generator_outputs_v1.py"] inputs: ["tools/validate_json_generator_outputs_v1.py", "Temp/computed_harness_v1.json", "Temp/final_decision_packet_active.json", "Temp/operational_report.json"] outputs: ["Temp/json_generator_outputs_v1.json"] depends_on: ["inject_harness", "finalize_packet", "build_report"] timeout_sec: 30 cache_key: "validate_json_generator_outputs_v1" strict: true artifact_policy: "keep" validate_field_dict: id: validate_field_dict command: ["python", "tools/validate_field_dictionary.py"] inputs: ["tools/validate_field_dictionary.py", "spec/12_field_dictionary.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_field_dict_v1" strict: true artifact_policy: "keep" validate_provenance: id: validate_provenance command: ["python", "tools/validate_number_provenance_strict_v3.py", "--ledger", "Temp/number_provenance_ledger_v4.json", "--report", "Temp/operational_report.md"] inputs: ["tools/validate_number_provenance_strict_v3.py", "Temp/number_provenance_ledger_v4.json", "Temp/operational_report.md"] depends_on: ["build_provenance_ledger", "build_report"] outputs: [] timeout_sec: 30 cache_key: "validate_provenance_v1" strict: true artifact_policy: "keep" validate_low_capability: id: validate_low_capability command: ["python", "tools/validate_low_capability_pack_v1.py", "--context", "Temp/final_context_for_llm_v5.yaml", "--contract", "spec/46_low_capability_execution_pack.yaml"] inputs: ["tools/validate_low_capability_pack_v1.py", "Temp/final_context_for_llm_v5.yaml", "spec/46_low_capability_execution_pack.yaml"] outputs: [] depends_on: ["build_final_context"] timeout_sec: 30 cache_key: "validate_low_capability_v1" strict: true artifact_policy: "keep" validate_low_capability_pipeline_todo_v2: id: validate_low_capability_pipeline_todo_v2 command: ["python", "tools/validate_low_capability_pipeline_todo_v2.py"] inputs: - "tools/validate_low_capability_pipeline_todo_v2.py" - "spec/23_low_capability_llm_pipeline_todo.yaml" outputs: - "Temp/low_capability_pipeline_todo_validation_v2.json" depends_on: [] timeout_sec: 30 cache_key: "validate_low_capability_pipeline_todo_v2" strict: true artifact_policy: "keep" validate_golden_coverage: id: validate_golden_coverage command: ["python", "tools/validate_golden_coverage_100.py"] inputs: ["tools/validate_golden_coverage_100.py"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_golden_coverage_v1" strict: true artifact_policy: "keep" validate_calibration: id: validate_calibration command: ["python", "tools/validate_calibration_registry_v1.py"] inputs: ["tools/validate_calibration_registry_v1.py"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_calibration_v1" strict: true artifact_policy: "keep" validate_schema_model: id: validate_schema_model command: ["python", "tools/validate_schema_model_generation_v1.py"] inputs: ["tools/validate_schema_model_generation_v1.py", "Temp/schema_model_generation_v1.json"] outputs: [] depends_on: ["build_schema_models"] timeout_sec: 30 cache_key: "validate_schema_model_v1" strict: true artifact_policy: "keep" validate_gas_adapter: id: validate_gas_adapter command: ["python", "tools/validate_gas_thin_adapter_v1.py"] inputs: ["tools/validate_gas_thin_adapter_v1.py"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_gas_adapter_v1" strict: true artifact_policy: "keep" validate_agents_shrink: id: validate_agents_shrink command: ["python", "tools/validate_agents_shrink_v1.py"] inputs: ["tools/validate_agents_shrink_v1.py", "AGENTS.md"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_agents_shrink_v1" strict: true artifact_policy: "keep" validate_docs_no_formula_duplication: id: validate_docs_no_formula_duplication command: ["python", "tools/validate_docs_no_formula_duplication_v1.py"] inputs: - "tools/validate_docs_no_formula_duplication_v1.py" - "AGENTS.md" - "docs/doctrine.md" - "docs/runbook.md" outputs: - "Temp/docs_no_formula_duplication_v1.json" depends_on: [] timeout_sec: 30 cache_key: "validate_docs_no_formula_duplication_v1" strict: true artifact_policy: "keep" validate_no_replay_live_mix: id: validate_no_replay_live_mix command: ["python", "tools/validate_no_replay_live_mix_v2.py", "--json", "Temp/live_replay_separation_v3.json", "--strict"] inputs: ["tools/validate_no_replay_live_mix_v2.py", "Temp/live_replay_separation_v3.json"] outputs: [] depends_on: ["build_live_replay_separation"] timeout_sec: 30 cache_key: "validate_no_replay_live_mix_v2" strict: true artifact_policy: "keep" validate_prediction_accuracy_harness: id: validate_prediction_accuracy_harness command: ["python", "tools/validate_prediction_accuracy_harness_v2.py"] inputs: ["tools/validate_prediction_accuracy_harness_v2.py", "Temp/prediction_accuracy_harness_v2.json"] outputs: ["Temp/validate_prediction_accuracy_harness_v2.json"] depends_on: ["build_prediction_accuracy_harness"] timeout_sec: 30 cache_key: "validate_prediction_accuracy_harness_v2" strict: true artifact_policy: "keep" validate_sector_flow_history_progress: id: validate_sector_flow_history_progress command: ["python", "tools/validate_sector_flow_history_progress_v1.py"] inputs: ["tools/validate_sector_flow_history_progress_v1.py", "Temp/sector_flow_history_progress_v1.json"] outputs: ["Temp/validate_sector_flow_history_progress_v1.json"] depends_on: ["build_sector_flow_history_progress"] timeout_sec: 30 cache_key: "validate_sector_flow_history_progress_v1" strict: true artifact_policy: "keep" validate_alpha_feedback_loop: id: validate_alpha_feedback_loop command: ["python", "tools/validate_alpha_feedback_loop_v2.py"] inputs: ["tools/validate_alpha_feedback_loop_v2.py", "Temp/alpha_feedback_loop_v2.json"] outputs: ["Temp/validate_alpha_feedback_loop_v2.json"] depends_on: ["build_alpha_feedback_loop"] timeout_sec: 30 cache_key: "validate_alpha_feedback_loop_v2" strict: true artifact_policy: "keep" validate_operational_alpha_calibration: id: validate_operational_alpha_calibration command: ["python", "tools/validate_operational_alpha_calibration_v2.py"] inputs: ["tools/validate_operational_alpha_calibration_v2.py", "Temp/operational_alpha_calibration_v2.json"] outputs: ["Temp/validate_operational_alpha_calibration_v2.json"] depends_on: ["build_operational_alpha_calibration"] timeout_sec: 30 cache_key: "validate_operational_alpha_calibration_v2" strict: true artifact_policy: "keep" validate_realized_performance: id: validate_realized_performance command: ["python", "tools/validate_realized_performance_v1.py"] inputs: ["tools/validate_realized_performance_v1.py", "Temp/realized_performance_v1.json"] outputs: ["Temp/validate_realized_performance_v1.json"] depends_on: ["build_realized_performance"] timeout_sec: 30 cache_key: "validate_realized_performance_v1" strict: true artifact_policy: "keep" note: "REALIZED_PERFORMANCE_V1 output schema and evidence validation" validate_runtime_source_whitelist: id: validate_runtime_source_whitelist command: ["python", "tools/validate_runtime_source_whitelist_v1.py", "--manifest", "runtime/active_artifact_manifest.yaml", "--scan", "src", "gas_*.gs"] inputs: ["tools/validate_runtime_source_whitelist_v1.py", "runtime/active_artifact_manifest.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_runtime_source_whitelist_v1" strict: true artifact_policy: "keep" validate_sector_universe_monthly_refresh: id: validate_sector_universe_monthly_refresh command: ["python", "tools/validate_sector_universe_monthly_refresh_v1.py"] inputs: ["tools/validate_sector_universe_monthly_refresh_v1.py", "GatherTradingData.xlsx"] outputs: ["Temp/sector_universe_refresh_validation.json"] depends_on: [] timeout_sec: 60 cache_key: "validate_sector_universe_monthly_refresh_v1" strict: false warn_only: true artifact_policy: "keep" note: "섹터 유니버스 월간 갱신 provenance 검증 (warn_only) — GAS 재다운로드 시 Source_URL 소실이 정상. 월간 --apply 실행 후 PASS/WARN 달성. FAIL=비차단 경고만." build_qualitative_sell_inputs: id: build_qualitative_sell_inputs command: ["python", "tools/build_qualitative_sell_inputs_v1.py", "--batch", "--workbook", "GatherTradingData.xlsx", "--apply"] inputs: ["tools/build_qualitative_sell_inputs_v1.py", "tools/build_macro_context_from_workbook_v1.py", "tools/fetch_naver_market_data_v1.py", "src/quant_engine/kis_api_client_v1.py", "GatherTradingData.xlsx"] outputs: ["outputs/qualitative_sell_strategy/*.json"] depends_on: [] timeout_sec: 120 cache_key: "build_qualitative_sell_inputs_v1" strict: false warn_only: true artifact_policy: "keep" note: "Naver 시세/수급 실시간 스크래핑 의존(warn_only) — 보유종목별 비기계적 매도전략 confluence 판단. 공매도잔고율은 --short-csv 수동 주입 전까지 구조적으로 DATA_MISSING(추정 금지) — 정상 동작. 호가10단계·공매도거래비중은 --kis-account {real,mock} 옵션으로 KIS Open API(read-only) 조회 가능(2026-06-21 연동) — DAG 기본 실행에는 미포함(자격증명 의존, 수동 실행 시에만 부여)." build_satellite_candidate_recommendations: id: build_satellite_candidate_recommendations command: ["python", "tools/build_satellite_candidate_recommendations_v1.py", "--workbook", "GatherTradingData.xlsx", "--apply"] inputs: ["tools/build_satellite_candidate_recommendations_v1.py", "tools/fetch_naver_market_data_v1.py", "GatherTradingData.xlsx"] outputs: ["outputs/qualitative_sell_strategy/satellite_recommendations.json"] depends_on: [] timeout_sec: 180 cache_key: "build_satellite_candidate_recommendations_v1" strict: false warn_only: true artifact_policy: "keep" note: "universe 시트 미보유 후보(60종) 전체 Naver 시세 조회 — warn_only. --trade-csv 없으면 sector_export_trend 전부 DATA_MISSING(정상, 추정 금지)." validate_cash_ledger: id: validate_cash_ledger command: ["python", "tools/validate_cash_ledger_v2.py", "--snapshot", "GatherTradingData.json", "--contract", "spec/15_account_snapshot_contract.yaml"] inputs: ["tools/validate_cash_ledger_v2.py", "GatherTradingData.json", "spec/15_account_snapshot_contract.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_cash_ledger_v2" strict: true artifact_policy: "keep" validate_factor_lifecycle: id: validate_factor_lifecycle command: ["python", "tools/validate_factor_lifecycle_v1.py", "--taxonomy", "spec/43_quant_factor_taxonomy.yaml"] inputs: ["tools/validate_factor_lifecycle_v1.py", "spec/43_quant_factor_taxonomy.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_factor_lifecycle_v1" strict: true artifact_policy: "keep" validate_factor_lifecycle_registry_v1: id: validate_factor_lifecycle_registry_v1 command: ["python", "tools/validate_factor_lifecycle_registry_v1.py"] inputs: - "tools/validate_factor_lifecycle_registry_v1.py" - "spec/43_quant_factor_taxonomy.yaml" - "spec/factor_lifecycle_registry.yaml" outputs: - "Temp/factor_lifecycle_registry_validation_v1.json" depends_on: [] timeout_sec: 30 cache_key: "validate_factor_lifecycle_registry_v1" strict: true artifact_policy: "keep" validate_anti_late_entry_gate_v5: id: validate_anti_late_entry_gate_v5 command: ["python", "tools/validate_anti_late_entry_gate_v5.py"] inputs: - "tools/validate_anti_late_entry_gate_v5.py" - "GatherTradingData.json" outputs: - "Temp/anti_late_entry_gate_validation_v5.json" depends_on: [] timeout_sec: 30 cache_key: "validate_anti_late_entry_gate_v5" strict: true artifact_policy: "keep" validate_decision_graph_precedence_v1: id: validate_decision_graph_precedence_v1 command: ["python", "tools/validate_decision_graph_precedence_v1.py"] inputs: - "tools/validate_decision_graph_precedence_v1.py" - "spec/routing/decision_graph.yaml" outputs: - "Temp/decision_graph_precedence_validation_v1.json" depends_on: [] timeout_sec: 30 cache_key: "validate_decision_graph_precedence_v1" strict: true artifact_policy: "keep" validate_factor_conflict_precedence_v1: id: validate_factor_conflict_precedence_v1 command: ["python", "tools/validate_factor_conflict_precedence_v1.py"] inputs: - "tools/validate_factor_conflict_precedence_v1.py" - "spec/strategy/pre_distribution_early_warning_v4.yaml" - "spec/strategy/smart_money_liquidity_gate_v1.yaml" - "spec/09_decision_flow.yaml" - "GatherTradingData.json" outputs: - "Temp/factor_conflict_precedence_validation_v1.json" depends_on: [] timeout_sec: 30 cache_key: "validate_factor_conflict_precedence_v1" strict: true artifact_policy: "keep" validate_honest_performance_guard_v1: id: validate_honest_performance_guard_v1 command: ["python", "tools/validate_honest_performance_guard_v1.py"] inputs: - "tools/validate_honest_performance_guard_v1.py" - "Temp/prediction_accuracy_harness_v2.json" - "Temp/honest_performance_guard_v1.json" outputs: - "Temp/honest_performance_guard_validation_v1.json" depends_on: ["build_honest_performance_guard"] timeout_sec: 30 cache_key: "validate_honest_performance_guard_v1" strict: true artifact_policy: "keep" validate_execution_precedence_lock_v2: id: validate_execution_precedence_lock_v2 command: ["python", "tools/validate_execution_precedence_lock_v2.py"] inputs: - "tools/validate_execution_precedence_lock_v2.py" - "Temp/final_execution_decision_v4.json" outputs: - "Temp/execution_precedence_lock_v2.json" depends_on: ["build_honest_performance_guard"] timeout_sec: 30 cache_key: "validate_execution_precedence_lock_v2" strict: true artifact_policy: "keep" validate_order_grammar_v1: id: validate_order_grammar_v1 command: ["python", "tools/validate_order_grammar_v1.py"] inputs: - "tools/validate_order_grammar_v1.py" - "GatherTradingData.json" outputs: - "Temp/order_grammar_validation_v1.json" depends_on: ["build_honest_performance_guard"] timeout_sec: 30 cache_key: "validate_order_grammar_v1" strict: true artifact_policy: "keep" validate_cash_floor_policy_v1: id: validate_cash_floor_policy_v1 command: ["python", "tools/validate_cash_floor_policy_v1.py"] inputs: - "tools/validate_cash_floor_policy_v1.py" - "GatherTradingData.json" - "Temp/operational_report.json" outputs: - "Temp/cash_floor_policy_validation_v1.json" depends_on: ["build_report"] timeout_sec: 30 cache_key: "validate_cash_floor_policy_v1" strict: true artifact_policy: "keep" validate_position_sizing: id: validate_position_sizing command: ["python", "tools/validate_position_sizing.py"] inputs: - "tools/validate_position_sizing.py" - "spec/01_objective_profile.yaml" - "Temp/goal_risk_budget_harness_v3.json" outputs: - "Temp/position_sizing_validation_v1.json" depends_on: ["build_report"] timeout_sec: 30 cache_key: "validate_position_sizing" strict: true artifact_policy: "keep" validate_factor_lifecycle_completeness: id: validate_factor_lifecycle_completeness command: ["python", "tools/validate_factor_lifecycle_completeness_v1.py"] inputs: ["tools/validate_factor_lifecycle_completeness_v1.py", "spec/factor_lifecycle_registry.yaml", "Temp/factor_shadow_eligibility_v1.json"] outputs: ["Temp/factor_lifecycle_completeness_v1.json"] depends_on: ["build_factor_shadow_eligibility"] timeout_sec: 30 cache_key: "validate_factor_lifecycle_completeness_v1" strict: true artifact_policy: "keep" validate_metric_alias_collision: id: validate_metric_alias_collision command: ["python", "tools/validate_metric_alias_collision_v1.py", "--registry", "spec/25_canonical_metrics_registry.yaml", "--report", "Temp/operational_report.json"] inputs: ["tools/validate_metric_alias_collision_v1.py", "spec/25_canonical_metrics_registry.yaml", "Temp/operational_report.json"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_metric_alias_collision_v1" strict: true artifact_policy: "keep" validate_architecture_boundaries: id: validate_architecture_boundaries command: ["python", "tools/validate_architecture_boundaries_v2.py"] inputs: ["tools/validate_architecture_boundaries_v2.py", "Temp/architecture_boundaries_v2.json"] outputs: [] depends_on: ["build_architecture_boundaries"] timeout_sec: 30 cache_key: "validate_architecture_boundaries_v2" strict: true artifact_policy: "keep" build_module_io_coverage: id: build_module_io_coverage command: ["python", "tools/build_module_io_coverage_v1.py"] inputs: ["tools/build_module_io_coverage_v1.py", "spec/48_module_io_contract_registry.yaml"] outputs: ["Temp/module_io_coverage_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_module_io_coverage_v1" strict: true artifact_policy: "keep" build_architecture_boundaries: id: build_architecture_boundaries command: ["python", "tools/build_architecture_boundaries_v2.py"] inputs: ["tools/build_architecture_boundaries_v2.py", "Temp/module_io_coverage_v1.json", "Temp/artifact_chain_hash_v4.json"] outputs: ["Temp/architecture_boundaries_v2.json"] depends_on: ["build_module_io_coverage", "build_artifact_chain_hash"] timeout_sec: 30 cache_key: "build_architecture_boundaries_v2" strict: true artifact_policy: "keep" validate_module_io_coverage: id: validate_module_io_coverage command: ["python", "tools/validate_module_io_coverage_v1.py"] inputs: ["tools/validate_module_io_coverage_v1.py", "Temp/module_io_coverage_v1.json"] outputs: [] depends_on: ["build_module_io_coverage"] timeout_sec: 30 cache_key: "validate_module_io_coverage_v1" strict: true artifact_policy: "keep" build_artifact_chain_hash: id: build_artifact_chain_hash command: ["python", "tools/build_artifact_chain_hash_v4.py"] inputs: ["tools/build_artifact_chain_hash_v4.py"] outputs: ["Temp/artifact_chain_hash_v4.json"] depends_on: ["build_provenance_ledger", "build_report"] timeout_sec: 30 cache_key: "build_artifact_chain_hash_v4" strict: true artifact_policy: "keep" validate_artifact_chain_hash: id: validate_artifact_chain_hash command: ["python", "tools/validate_artifact_chain_hash_v4.py"] inputs: ["tools/validate_artifact_chain_hash_v4.py", "Temp/artifact_chain_hash_v4.json"] outputs: [] depends_on: ["build_artifact_chain_hash"] timeout_sec: 30 cache_key: "validate_artifact_chain_hash_v4" strict: true artifact_policy: "keep" validate_artifact_sync: id: validate_artifact_sync command: ["python", "tools/validate_artifact_sync_v1.py", "--engine-result", "Temp/engine_harness_gate_result.json", "--manifest", "runtime/active_artifact_manifest.yaml", "--registry", "Temp/formula_runtime_registry_v1.json"] inputs: ["tools/validate_artifact_sync_v1.py", "Temp/engine_harness_gate_result.json", "Temp/formula_runtime_registry_v1.json", "runtime/active_artifact_manifest.yaml"] outputs: [] depends_on: ["validate_engine_health_card"] timeout_sec: 30 cache_key: "validate_artifact_sync_v1" strict: false warn_only: true artifact_policy: "keep" validate_renderer_no_calc: id: validate_renderer_no_calc command: ["python", "tools/validate_renderer_no_calculation_v1.py"] inputs: ["tools/validate_renderer_no_calculation_v1.py"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_renderer_no_calc_v1" strict: true artifact_policy: "keep" validate_packaged_refs: id: validate_packaged_refs command: ["python", "tools/validate_packaged_artifact_references_v1.py", "--strict"] inputs: ["tools/validate_packaged_artifact_references_v1.py", "runtime/active_artifact_manifest.yaml"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_packaged_refs_v1" strict: true artifact_policy: "keep" validate_property_invariants: id: validate_property_invariants command: ["python", "tools/run_property_tests_v1.py"] inputs: ["tools/run_property_tests_v1.py", "spec/property_invariants.yaml"] outputs: ["Temp/property_test_result_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "validate_property_invariants_v1" strict: true artifact_policy: "keep" validate_anti_late_entry: id: validate_anti_late_entry command: ["python", "tools/validate_anti_late_entry_harness_v1.py", "--json", "Temp/late_chase_attribution_v2.json"] inputs: ["tools/validate_anti_late_entry_harness_v1.py", "Temp/late_chase_attribution_v2.json"] outputs: [] depends_on: ["build_late_chase_attribution"] timeout_sec: 30 cache_key: "validate_anti_late_entry_v1" strict: true artifact_policy: "keep" validate_rule_lifecycle: id: validate_rule_lifecycle command: ["python", "tools/validate_rule_lifecycle_v2.py", "--strict"] inputs: ["tools/validate_rule_lifecycle_v2.py", "Temp/shadow_ledger_v2.json"] outputs: [] depends_on: ["build_shadow_ledger"] timeout_sec: 30 cache_key: "validate_rule_lifecycle_v2" strict: true artifact_policy: "keep" validate_change_requests: id: validate_change_requests command: ["python", "tools/validate_change_requests_v1.py", "--dir", "governance/change_requests", "--strict"] inputs: ["tools/validate_change_requests_v1.py"] outputs: [] depends_on: [] timeout_sec: 30 cache_key: "validate_change_requests_v1" strict: true artifact_policy: "keep" validate_completion_harness_instructions: id: validate_completion_harness_instructions command: ["python", "tools/validate_completion_harness_instructions_v1.py"] inputs: [ "tools/validate_completion_harness_instructions_v1.py", "AGENTS.md", "REPORT_GUIDE.md", "docs/runbook.md", "docs/ROADMAP_WBS.md", "docs/doctrine.md", "prompts/analysis_prompt.md", "prompts/review_prompt.md", "prompts/capture_parse_prompt.md", "prompts/engine_audit_master_prompt_v2.md", "prompts/engine_audit_master_prompt_v3.md", "prompts/engine_audit_prompt.md", "prompts/low_capability_report_renderer.md", "prompts/report_renderer_prompt.md", "prompts/weekly_operational_report_master_prompt_v1.md" ] outputs: ["Temp/completion_harness_instructions_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "validate_completion_harness_instructions_v1" strict: true artifact_policy: "keep" validate_engine_health_card: id: validate_engine_health_card command: ["python", "tools/validate_engine_health_card_v1.py", "--json", "Temp/engine_health_card_v1.json"] inputs: ["tools/validate_engine_health_card_v1.py", "Temp/engine_health_card_v1.json"] outputs: [] depends_on: ["build_engine_health_card"] timeout_sec: 30 cache_key: "validate_engine_health_card_v1" strict: true artifact_policy: "keep" validate_llm_regression: id: validate_llm_regression command: ["python", "tools/run_low_capability_llm_regression_v1.py", "--fixture", "tests/llm_regression", "--context", "Temp/final_context_for_llm_v5.yaml"] inputs: ["tools/run_low_capability_llm_regression_v1.py", "Temp/final_context_for_llm_v5.yaml"] outputs: [] depends_on: ["build_final_context"] timeout_sec: 30 cache_key: "validate_llm_regression_v1" strict: true artifact_policy: "keep" validate_llm_copy_only: id: validate_llm_copy_only command: ["python", "tools/validate_llm_copy_only_output_v1.py", "--packet", "Temp/final_decision_packet_active.json", "--report", "Temp/operational_report.json"] inputs: ["tools/validate_llm_copy_only_output_v1.py", "Temp/final_decision_packet_active.json", "Temp/operational_report.json"] outputs: [] depends_on: ["build_report", "build_final_decision"] timeout_sec: 30 cache_key: "validate_llm_copy_only_v1" strict: true artifact_policy: "keep" build_final_decision: id: build_final_decision command: ["python", "tools/build_final_decision_packet_v4.py", "--src", "Temp/final_decision_packet_active.json", "--out", "Temp/final_decision_packet_v4.json"] inputs: ["tools/build_final_decision_packet_v4.py", "Temp/final_decision_packet_active.json"] outputs: ["Temp/final_decision_packet_v4.json"] depends_on: ["finalize_packet"] timeout_sec: 30 cache_key: "build_final_decision_v1" strict: true artifact_policy: "keep" build_final_context: id: build_final_context command: ["python", "tools/build_low_capability_context_pack_v5.py", "--manifest", "runtime/active_artifact_manifest.yaml", "--packet", "Temp/final_decision_packet_v4.json", "--out", "Temp/final_context_for_llm_v5.yaml"] inputs: ["tools/build_low_capability_context_pack_v5.py", "runtime/active_artifact_manifest.yaml", "Temp/final_decision_packet_v4.json"] outputs: ["Temp/final_context_for_llm_v5.yaml"] depends_on: ["build_final_decision"] timeout_sec: 30 cache_key: "build_final_context_v1" strict: true artifact_policy: "keep" build_provenance_ledger: id: build_provenance_ledger command: ["python", "tools/build_number_provenance_ledger_v4.py", "--packet", "Temp/final_decision_packet_v4.json", "--out", "Temp/number_provenance_ledger_v4.json"] inputs: ["tools/build_number_provenance_ledger_v4.py", "Temp/final_decision_packet_v4.json"] outputs: ["Temp/number_provenance_ledger_v4.json"] depends_on: ["build_final_decision"] timeout_sec: 30 cache_key: "build_provenance_ledger_v1" strict: true artifact_policy: "keep" build_live_replay_separation: id: build_live_replay_separation command: ["python", "tools/build_live_replay_separation_v3.py", "--out", "Temp/live_replay_separation_v3.json"] inputs: ["tools/build_live_replay_separation_v3.py"] outputs: ["Temp/live_replay_separation_v3.json"] depends_on: [] timeout_sec: 30 cache_key: "build_live_replay_separation_v3" strict: true artifact_policy: "keep" build_late_chase_attribution: id: build_late_chase_attribution command: ["python", "tools/build_late_chase_attribution_v2.py", "--json", "GatherTradingData.json", "--out", "Temp/late_chase_attribution_v2.json"] inputs: ["tools/build_late_chase_attribution_v2.py", "GatherTradingData.json"] outputs: ["Temp/late_chase_attribution_v2.json"] depends_on: [] timeout_sec: 30 cache_key: "build_late_chase_attribution_v2" strict: true artifact_policy: "keep" build_profit_giveback_ratchet: id: build_profit_giveback_ratchet command: ["python", "tools/build_profit_giveback_ratchet_v2.py", "--json", "GatherTradingData.json", "--out", "Temp/profit_giveback_ratchet_v2.json"] inputs: ["tools/build_profit_giveback_ratchet_v2.py", "GatherTradingData.json"] outputs: ["Temp/profit_giveback_ratchet_v2.json"] depends_on: [] timeout_sec: 30 cache_key: "build_profit_giveback_ratchet_v2" strict: true artifact_policy: "keep" build_shadow_ledger: id: build_shadow_ledger command: ["python", "tools/build_shadow_ledger_v2.py", "--out", "Temp/shadow_ledger_v2.json"] inputs: ["tools/build_shadow_ledger_v2.py"] outputs: ["Temp/shadow_ledger_v2.json"] depends_on: [] timeout_sec: 30 cache_key: "build_shadow_ledger_v2" strict: true artifact_policy: "keep" build_operating_cadence_signal: id: build_operating_cadence_signal command: ["python", "tools/build_operating_cadence_signal_v1.py", "--timezone", "Asia/Seoul", "--out", "Temp/operating_cadence_signal_v1.json"] inputs: ["tools/build_operating_cadence_signal_v1.py"] outputs: ["Temp/operating_cadence_signal_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_operating_cadence_signal_v1" strict: true artifact_policy: "keep" build_engine_health_card: id: build_engine_health_card command: ["python", "tools/build_engine_health_card_v1.py", "--out", "Temp/engine_health_card_v1.json"] inputs: ["tools/build_engine_health_card_v1.py"] outputs: ["Temp/engine_health_card_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_engine_health_card_v1" strict: true artifact_policy: "keep" build_report: id: build_report command: ["python", "tools/render_operational_report.py", "--json", "GatherTradingData.json", "--output", "Temp/operational_report.md", "--report-json-output", "Temp/operational_report.json"] inputs: ["tools/render_operational_report.py", "GatherTradingData.json", "Temp/final_decision_packet_active.json"] outputs: ["Temp/operational_report.md", "Temp/operational_report.json"] depends_on: ["convert_xlsx", "build_final_decision"] timeout_sec: 60 cache_key: "build_report_v1" strict: true artifact_policy: "keep" build_honest_performance_guard: id: build_honest_performance_guard command: ["python", "tools/build_honest_performance_guard_v1.py"] inputs: - "tools/build_honest_performance_guard_v1.py" - "Temp/rebound_sell_efficiency_v1.json" - "Temp/late_chase_attribution_v1.json" - "Temp/operational_report.json" outputs: - "Temp/honest_performance_guard_v1.json" depends_on: ["build_report"] timeout_sec: 30 cache_key: "build_honest_performance_guard_v1" strict: true artifact_policy: "keep" build_honest_proof_gap_analyzer: id: build_honest_proof_gap_analyzer command: ["python", "tools/build_honest_proof_gap_analyzer_v1.py"] inputs: ["tools/build_honest_proof_gap_analyzer_v1.py", "Temp/algorithm_guidance_proof_v1.json", "Temp/prediction_accuracy_harness_v2.json", "Temp/imputed_data_exposure_gate_v2.json"] outputs: ["Temp/honest_proof_gap_analyzer_v1.json"] depends_on: ["build_algorithm_guidance_proof"] timeout_sec: 30 cache_key: "build_honest_proof_gap_analyzer_v1" strict: false artifact_policy: "keep" note: "RELEASE_GATE_TRUTH 45.1→70 경로 분석 — non-blocking diagnostic" build_bundle: id: build_bundle command: ["python", "tools/build_bundle.py"] inputs: ["tools/build_bundle.py"] outputs: ["dist/retirement_portfolio_compact.yaml", "dist/retirement_portfolio_ultra_compact.yaml"] depends_on: [] timeout_sec: 30 cache_key: "build_bundle_v1" strict: true artifact_policy: "keep" build_schema_models: id: build_schema_models command: ["python", "tools/generate_models_from_schema.py"] inputs: ["tools/generate_models_from_schema.py", "schemas/generated"] outputs: ["Temp/schema_model_generation_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "build_schema_models_v1" strict: true artifact_policy: "keep" # ── P1-2: live data 자동 전환 게이트 ───────────────────────────────────── validate_live_activation: id: validate_live_activation command: ["python", "tools/validate_live_data_activation_gate_v1.py"] inputs: ["tools/validate_live_data_activation_gate_v1.py", "Temp/continuous_evaluation_dashboard_v1.json", "Temp/prediction_accuracy_harness_v2.json", "Temp/algorithm_guidance_proof_v1.json", "Temp/pass_100_criteria_v3.json"] outputs: ["Temp/live_data_activation_gate_v1.json"] depends_on: [] timeout_sec: 30 cache_key: "validate_live_activation_v1" strict: false artifact_policy: "keep" note: "PENDING(live_t20<30) = 정상. FAIL = 전환 조건 미충족. 2026-07-15 자동 활성화 예정." # ── P1-1: TIME_STOP 사전 예측 ───────────────────────────────────────────── build_time_stop_forecast: id: build_time_stop_forecast command: ["python", "tools/build_time_stop_forecast_v1.py", "--harness", "Temp/computed_harness_v1.json"] inputs: ["tools/build_time_stop_forecast_v1.py", "Temp/computed_harness_v1.json"] outputs: ["Temp/time_stop_forecast_v1.json"] depends_on: ["build_formula_outputs"] timeout_sec: 30 cache_key: "build_time_stop_forecast_v1" strict: false artifact_policy: "keep" note: "WARN 허용 (발동 임박 = 경고, 미발동 = PASS)" # ── spec/52~58 H001~H008 ghost contract validators ─────────────────────── validate_decision_trace: id: validate_decision_trace command: ["python", "tools/validate_decision_trace_replay_v1.py", "--packet", "Temp/final_decision_packet_active.json", "--harness", "Temp/computed_harness_v1.json"] inputs: ["tools/validate_decision_trace_replay_v1.py", "Temp/final_decision_packet_active.json", "Temp/computed_harness_v1.json"] outputs: ["Temp/decision_trace_replay_v1.json"] depends_on: ["finalize_packet", "build_formula_outputs"] timeout_sec: 30 cache_key: "validate_decision_trace_v1" strict: true artifact_policy: "keep" contract: "spec/52_decision_trace_replay_contract.yaml" validate_factor_conflicts: id: validate_factor_conflicts command: ["python", "tools/validate_factor_conflict_matrix_v1.py", "--taxonomy", "spec/43_quant_factor_taxonomy.yaml", "--packet", "Temp/final_decision_packet_active.json"] inputs: ["tools/validate_factor_conflict_matrix_v1.py", "spec/43_quant_factor_taxonomy.yaml", "Temp/final_decision_packet_active.json"] outputs: ["Temp/factor_conflict_matrix_v1.json"] depends_on: ["finalize_packet"] timeout_sec: 30 cache_key: "validate_factor_conflicts_v1" strict: true artifact_policy: "keep" contract: "spec/53_factor_conflict_matrix.yaml" validate_no_lookahead: id: validate_no_lookahead command: ["python", "tools/validate_no_lookahead_bias_v1.py", "--harness", "Temp/computed_harness_v1.json"] inputs: ["tools/validate_no_lookahead_bias_v1.py", "Temp/computed_harness_v1.json"] outputs: ["Temp/no_lookahead_bias_v1.json"] depends_on: ["build_formula_outputs"] timeout_sec: 30 cache_key: "validate_no_lookahead_v1" strict: true artifact_policy: "keep" contract: "spec/54_temporal_data_integrity.yaml" validate_execution_sim: id: validate_execution_sim command: ["python", "tools/validate_execution_simulator_v1.py", "--packet", "Temp/final_decision_packet_active.json"] inputs: ["tools/validate_execution_simulator_v1.py", "Temp/final_decision_packet_active.json"] outputs: ["Temp/execution_simulator_v1.json"] depends_on: ["finalize_packet"] timeout_sec: 30 cache_key: "validate_execution_sim_v1" strict: true artifact_policy: "keep" contract: "spec/55_execution_simulator_contract.yaml" validate_render_diff: id: validate_render_diff command: ["python", "tools/validate_report_render_diff_v1.py", "--packet", "Temp/final_decision_packet_active.json", "--report", "Temp/operational_report.json"] inputs: ["tools/validate_report_render_diff_v1.py", "Temp/final_decision_packet_active.json", "Temp/operational_report.json"] outputs: ["Temp/report_render_diff_v1.json"] depends_on: ["build_report", "finalize_packet"] timeout_sec: 30 cache_key: "validate_render_diff_v1" strict: true artifact_policy: "keep" contract: "spec/56_renderer_copy_only_contract.yaml" build_shadow_promotion: id: build_shadow_promotion command: ["python", "tools/build_shadow_promotion_scorecard_v1.py", "--shadow", "Temp/shadow_ledger_v2.json", "--live-replay", "Temp/live_replay_separation_v3.json"] inputs: ["tools/build_shadow_promotion_scorecard_v1.py", "Temp/shadow_ledger_v2.json", "Temp/live_replay_separation_v3.json"] outputs: ["Temp/shadow_promotion_scorecard_v1.json"] depends_on: ["build_shadow_ledger", "build_live_replay_separation"] timeout_sec: 30 cache_key: "build_shadow_promotion_v1" strict: true artifact_policy: "keep" contract: "spec/57_shadow_promotion_scorecard.yaml" validate_llm_determinism: id: validate_llm_determinism command: ["python", "tools/validate_llm_determinism_pack_v1.py", "--context", "Temp/final_context_for_llm_v5.yaml"] inputs: ["tools/validate_llm_determinism_pack_v1.py", "Temp/final_context_for_llm_v5.yaml"] outputs: ["Temp/llm_determinism_pack_v1.json"] depends_on: ["build_final_context"] timeout_sec: 30 cache_key: "validate_llm_determinism_v1" strict: true artifact_policy: "keep" contract: "spec/58_llm_determinism_contract.yaml" update_proposal_evaluation_history: id: update_proposal_evaluation_history command: ["python", "tools/update_proposal_evaluation_history.py", "--json", "GatherTradingData.json", "--history", "Temp/proposal_evaluation_history.json"] inputs: ["tools/update_proposal_evaluation_history.py", "GatherTradingData.json"] outputs: ["Temp/proposal_evaluation_history.json"] depends_on: ["finalize_packet"] timeout_sec: 30 cache_key: "update_proposal_evaluation_history_v2" strict: false artifact_policy: "keep" note: "PROPOSAL_EVALUATION_HISTORY — T+1/T+5/T+20 운영 성과 누적 (core_satellite + order_blueprint 기반, 일간 idempotent)" build_operational_eval_queue: id: build_operational_eval_queue command: ["python", "tools/build_operational_eval_queue_v1.py", "--history", "Temp/proposal_evaluation_history.json", "--out", "Temp/operational_eval_queue_v1.json"] inputs: ["tools/build_operational_eval_queue_v1.py", "Temp/proposal_evaluation_history.json"] outputs: ["Temp/operational_eval_queue_v1.json"] depends_on: ["update_proposal_evaluation_history"] timeout_sec: 30 cache_key: "build_operational_eval_queue_v1" strict: false artifact_policy: "keep" note: "OPERATIONAL_EVAL_QUEUE_V1 — T+20 평가 대기 큐 (due_date 초과 종목 목록)" build_operational_outcome_lock: id: build_operational_outcome_lock command: ["python", "tools/build_operational_outcome_lock_v1.py", "--history", "Temp/proposal_evaluation_history.json", "--out", "Temp/operational_outcome_lock_v1.json"] inputs: ["tools/build_operational_outcome_lock_v1.py", "Temp/proposal_evaluation_history.json"] outputs: ["Temp/operational_outcome_lock_v1.json"] depends_on: ["update_proposal_evaluation_history"] timeout_sec: 30 cache_key: "build_operational_outcome_lock_v1" strict: false artifact_policy: "keep" note: "OPERATIONAL_OUTCOME_LOCK_V1 — 실운영 T+20 성과 잠금 (30건 이상 누적 후 활성화)" prepare_zip: id: prepare_zip command: ["python", "tools/prepare_upload_zip.py", "--skip-validate", "--skip-convert", "--validation-mode", "package-only"] inputs: ["tools/prepare_upload_zip.py"] outputs: [] depends_on: ["audit_entropy", "validate_execution_precedence_lock_v2", "validate_order_grammar_v1", "validate_specs", "validate_no_direct_api_trading", "validate_active_manifest", "validate_report_sync", "validate_report_numeric_consistency", "validate_field_dict", "validate_provenance", "validate_low_capability", "validate_low_capability_pipeline_todo_v2", "validate_golden_coverage", "validate_calibration", "validate_schema_model", "validate_gas_adapter", "build_gas_bundle", "validate_gas_adapter_contract", "validate_gas_bundle_sync", "validate_agents_shrink", "validate_no_replay_live_mix", "validate_prediction_accuracy_harness", "validate_alpha_feedback_loop", "validate_operational_alpha_calibration", "validate_realized_performance", "validate_data_gated_progress", "validate_sector_flow_history_progress", "validate_runtime_source_whitelist", "validate_cash_ledger", "validate_factor_lifecycle", "validate_factor_lifecycle_registry_v1", "validate_factor_lifecycle_completeness", "validate_metric_alias_collision", "validate_architecture_boundaries", "validate_module_io_coverage", "validate_artifact_chain_hash", "validate_artifact_sync", "validate_renderer_no_calc", "validate_packaged_refs", "validate_property_invariants", "validate_anti_late_entry", "validate_rule_lifecycle", "validate_change_requests", "validate_completion_harness_instructions", "validate_engine_health_card", "validate_llm_regression", "validate_llm_copy_only", "build_final_decision", "build_final_context", "build_provenance_ledger", "build_live_replay_separation", "build_late_chase_attribution", "build_profit_giveback_ratchet", "build_shadow_ledger", "build_operating_cadence_signal", "build_engine_health_card", "build_module_io_coverage", "build_artifact_chain_hash", "build_report", "build_bundle", "build_schema_models", "build_architecture_boundaries", "validate_decision_trace", "validate_factor_conflicts", "validate_no_lookahead", "validate_execution_sim", "validate_render_diff", "build_shadow_promotion", "validate_llm_determinism", "build_time_stop_forecast", "validate_live_activation", "build_rebalance_sheet", "build_prediction_accuracy_harness", "build_alpha_feedback_loop", "build_calibration_priority", "build_calibration_change_ledger", "build_calibration_review_report", "build_calibration_approval_list", "build_calibration_decision_draft", "build_operational_alpha_calibration", "build_sector_flow_history_progress"] timeout_sec: 60 cache_key: "prepare_zip_v1" strict: true artifact_policy: "keep"