WBS-7.3: GAS→Python 마이그레이션 5개 항목 완료 (F14, F02-F06)

- F14: late_chase_risk_score 검증
  * GAS가 유일한 생산처 (Python canonical 없음)
  * migration_action: KEEP_IN_GAS로 정정, status: DONE

- F02/F03/F04/F06: priceBasis 로직 포팅
  * formulas/price_basis_v1.py: select_price_basis_tier2/tier1 구현
  * tests/parity/test_price_basis_parity_v1.py: 8 parity 테스트 (모두 PASS)
  * GAS Number.isFinite() 의미론 정확히 재현 (math.isfinite 사용)
  * 모든 테스트 112/112 PASS

남은 작업 (4개):
- F05: decision_logic (action assignment)
- F07: score_logic (threshold addition)
- F10: routing decision
- F15: late_chase_gate

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 22:45:00 +09:00
parent 4266039d1c
commit af1236202d
64 changed files with 13127 additions and 2760 deletions
+263 -2
View File
@@ -1,5 +1,5 @@
schema_version: release_dag.v3
step_count: 99
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"
@@ -8,6 +8,7 @@ execution_order:
wave_0:
- audit_entropy
- build_bundle
- build_gas_bundle
- build_macro_event_ticker_impact
- build_engine_health_card
- build_late_chase_attribution
@@ -20,14 +21,17 @@ execution_order:
- 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
@@ -38,6 +42,7 @@ execution_order:
- 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
@@ -105,6 +110,9 @@ execution_order:
- 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
@@ -121,6 +129,72 @@ execution_order:
- 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"]
@@ -665,6 +739,20 @@ dag:
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"]
@@ -720,6 +808,23 @@ dag:
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"]
@@ -865,6 +970,145 @@ dag:
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"]
@@ -1213,6 +1457,22 @@ dag:
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"]
@@ -1221,6 +1481,7 @@ dag:
"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"
@@ -1439,7 +1700,7 @@ dag:
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_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_golden_coverage", "validate_calibration", "validate_schema_model", "validate_gas_adapter", "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_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"]
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