schema_version: quant_engine_refactor_blueprint.v1
generated_at_kst: '2026-06-07T16:00:00+09:00'
title: 저성능 LLM 호환 퀀트투자 엔진 리팩토링·고도화 YAML 실행계획
role_assumption: 30년 퀀트투자자 + 시니어 개발자 + 아키텍트 + PM 관점
objective:
  primary: md/yaml/gs/py만으로도 장기 확장 가능한 결정론적 퀀트투자 엔진 운영체계 확립
  secondary: 저성능 LLM이 TODO와 final_context packet만 따라도 고성능 LLM과 같은 보고서/판단을 재현하도록 수치·공식·게이트를
    고정
  target_outcome: 임의 판단 최소화, 공식/데이터 정합성 100%, 릴리스 DAG PASS, GAS thin adapter, Python
    canonical engine, 문서 다이어트
current_state_audit:
  source_zip: data_feed.zip
  authority_file_observed: data_feed/AGENTS.md
  repository_entropy_audit:
    gate: PASS
    total_file_count: 1423
    package_script_count: 21
    temp_json_count: 16
    budget:
      max_total_files: 2000
      max_package_scripts: 220
      max_temp_json_files: 500
  local_file_scan:
    md_files: 39
    yaml_files: 166
    gs_files: 7
    py_files: 829
    json_files_after_local_gate_attempt: 377
    md_lines: 3775
    yaml_lines: 88487
    gs_lines: 20423
    py_lines: 60077
  formula_and_test_scan:
    registered_formulas_in_spec_13: 149
    execution_order_entries: 53
    registered_formulas_not_in_primary_execution_order: 100
    runtime_generated_formula_py: 149
    generated_model_py: 150
    generated_model_schema_json: 150
    generated_golden_cases: 149
  gas_scan:
    gas_apex_alpha_watch.gs:
      lines: 365
      functions: 13
    gas_apex_runtime_core.gs:
      lines: 654
      functions: 14
    gas_data_collect.gs:
      lines: 4451
      functions: 79
    gas_data_feed.gs:
      lines: 10302
      functions: 177
    gas_harness_rows.gs:
      lines: 1456
      functions: 6
    gas_lib.gs:
      lines: 2749
      functions: 98
    gas_report.gs:
      lines: 446
      functions: 3
  release_gate_observation:
    command_attempted: python tools/run_release_dag_v3.py --mode release --strict
    result: FAIL
    first_failed_node: validate_low_capability
    failure_reason: Temp/final_context_for_llm_v5.yaml 파일을 요구하지만 Temp/final_context_for_llm_v4.yaml만
      존재
    missing_inputs_detected_in_release_dag:
    - Temp/final_context_for_llm_v5.yaml
    - Temp/live_replay_separation_v3.json
    - Temp/late_chase_attribution_v2.json
    - Temp/shadow_ledger_v2.json
    - Temp/engine_health_card_v1.json
  version_sprawl_observation:
    strategy_spec_version_groups: 4
    tool_version_groups: 35
    runtime_generated_formula_version_groups: 5
    highest_risk_groups:
    - build_final_context_for_llm_v2/v4 vs release_dag v5
    - build_live_replay_separation_v2/v3 vs Temp live_replay_separation_v2 only
    - fundamental_quality.yaml/v2/v3 without explicit retirement in immediate routing
    - pre_distribution_early_warning_v3/v4
    - predictive_alpha_dialectic_v1/v2
cold_assessment:
  verdict: 방향은 맞지만 운영 가능성은 릴리스 DAG와 artifact alias 정합성에서 깨진다. 알고리즘 자체보다 운영 하네스의 파일명·버전·계약
    drift가 먼저 수익률을 훼손할 수 있다.
  what_is_good:
  - AGENTS.md가 source-of-truth, Python canonical first, GAS adapter second, provenance,
    shadow ledger 원칙을 이미 보유
  - formula registry 149개와 generated formula/golden parity가 거의 1:1 구조
  - repository entropy budget은 아직 예산 이내
  - release DAG 개념과 active_artifact_manifest가 존재해 단일 실행 경로로 수렴 가능
  what_is_dangerous:
  - 릴리스 DAG가 존재하지 않는 v5/v3 산출물을 직접 참조하여 풀 게이트가 중단됨
  - GAS가 collect/normalize/export/display를 넘어 의사결정·계산 로직을 여전히 많이 품고 있을 가능성이 높음
  - versioned tool/spec가 많아 active/retired/shadow 상태를 모르면 저성능 LLM이 잘못된 버전을 선택할 위험이
    큼
  - 공식 수는 충분하지만 formula lifecycle, activation threshold, retirement condition, expected
    edge 검증이 모든 신규 팩터에 강제되지 않으면 뒷북·설거지 매수가 반복됨
  - 보고서는 기계 산출물이어야 하는데, 중간 YAML/JSON 이름 drift가 있으면 LLM이 결측을 메우려는 환각 경로가 열린다
  non_negotiable_direction: 더 많은 규칙을 추가하지 말고, 규칙을 코드·스키마·골든케이스·DAG 게이트로 실행 가능하게 줄여야
    한다. 문서는 줄이고, 계약과 검증은 강화한다.
target_methodology:
  name: 'QEDD-SSDLC: Quant Evidence Driven Development + Spec-as-Code Deterministic
    Lifecycle'
  summary: 투자 아이디어는 문장이 아니라 가설-입력-공식-골든케이스-섀도원장-성과평가-활성화 게이트로만 승격한다.
  principles:
  - id: P1
    name: Single Source of Truth
    rule: spec/와 runtime/active_artifact_manifest.yaml이 권위다. Temp는 실행 결과일 뿐 직접 수정하지
      않는다.
  - id: P2
    name: Formula before narrative
    rule: 가격·수량·TP·SL·점수는 spec/13_formula_registry.yaml 또는 하네스 산출값만 허용한다.
  - id: P3
    name: Python canonical first
    rule: 새 의사결정 로직은 src/quant_engine에 먼저 구현하고, GAS는 collect/normalize/export/display만
      수행한다.
  - id: P4
    name: Shadow before active
    rule: 새 팩터는 최소 20거래일 또는 50건 신호의 shadow 성과가 없으면 active 금지.
  - id: P5
    name: No hidden overrides
    rule: LLM, 리포트 렌더러, GAS UI는 하네스 결정을 번복하지 않는다.
  - id: P6
    name: Low capability first
    rule: 저성능 LLM이 읽을 final_context packet은 고정 섹션·고정 순서·숫자 json_path를 갖는다.
  - id: P7
    name: Entropy budget
    rule: 새 파일 1개를 만들면 owner, lifecycle, retirement path, release gate 등록을 동시에 요구한다.
  - id: P8
    name: Evidence over complexity
    rule: 수익 개선 또는 리스크 감소를 수치로 증명하지 못한 팩터는 active로 승격하지 않는다.
  core_loop:
  - hypothesis_yaml
  - data_contract
  - formula_registry_entry
  - python_canonical_implementation
  - schema_model_generation
  - golden_case
  - shadow_ledger
  - calibration_report
  - release_dag_gate
  - active_manifest_promotion
  - low_capability_context_pack
  - report_renderer
target_architecture:
  pipeline:
  - stage: S0_collect
    owner: GAS thin adapter
    allowed:
    - collect
    - normalize
    - export
    - display
    forbidden:
    - decision
    - sizing
    - stop_loss
    - take_profit
    - risk_score
  - stage: S1_raw_snapshot
    owner: GatherTradingData.json + raw workbook mapping
    gate: spec/14_raw_workbook_mapping.yaml + spec/15_account_snapshot_contract.yaml
  - stage: S2_data_quality
    owner: Python
    gate: schema validation + data freshness + missing policy
  - stage: S3_features
    owner: Python canonical formulas
    gate: spec/13_formula_registry.yaml + generated golden cases
  - stage: S4_risk_and_portfolio
    owner: Python
    gate: aggregate_risk + portfolio_exposure + cash floor
  - stage: S5_decision
    owner: Python decision DAG
    gate: spec/09_decision_flow.yaml + spec/routing/decision_graph.yaml
  - stage: S6_execution_packet
    owner: final_decision_packet
    gate: spec/40_final_decision_packet_contract.yaml
  - stage: S7_low_capability_pack
    owner: context pack builder
    gate: spec/46_low_capability_execution_pack.yaml
  - stage: S8_report
    owner: renderer
    gate: renderer_no_calc + number provenance + report sync
  authority_matrix:
    AGENTS.md: 운영 인덱스만 담당. 세부 규칙을 직접 비대화하지 않는다.
    governance/rules/*.yaml: 운영 규칙. 짧고 해시 검증 가능해야 한다.
    spec/*.yaml: 계약·공식·게이트·출력 스키마의 최상위 권위.
    src/quant_engine: canonical Python implementation.
    tools/*.py: CLI wrapper와 audit/validation 도구. 핵심 투자 로직 금지.
    gas_*.gs: thin adapter. 계산/판단 로직 제거 대상.
    Temp/*.json|yaml: 런타임 산출물. 직접 편집 금지.
    dist/: 배포 산출물. source of truth 금지.
    prompts/: 렌더링 지시. 숫자 생성 금지.
    tests/: golden, parity, regression, replay 검증 담당.
  proposed_new_or_updated_files:
  - spec/48_engine_refactor_methodology.yaml
  - spec/release/artifact_alias_registry.yaml
  - spec/release/version_retirement_policy.yaml
  - spec/release/low_capability_context_aliases.yaml
  - tools/validate_release_dag_inputs_exist_v1.py
  - tools/build_runtime_artifact_aliases_v1.py
  - tools/audit_version_sprawl_v1.py
  - tools/validate_factor_lifecycle_completeness_v2.py
  - tools/validate_gas_forbidden_logic_ratio_v2.py
  - tools/validate_llm_no_numeric_generation_v1.py
  - src/quant_engine/core/pipeline_context.py
  - src/quant_engine/core/decision_packet.py
  - src/quant_engine/core/provenance.py
  - src/quant_engine/core/artifact_resolver.py
hard_invariants:
- id: I001
  statement: LLM은 숫자를 계산하지 않는다.
  validation: validate_llm_no_numeric_generation_v1.py
- id: I002
  statement: 모든 보고서 숫자는 source_path, json_pointer, formula_id, input_hash, freshness_status를
    가져야 한다.
  validation: validate_number_provenance_strict_v3.py
- id: I003
  statement: global_execution_gate != HTS_READY이면 주문표 출력 금지.
  validation: validate_execution_authority_matrix_v2.py
- id: I004
  statement: blocked/limited 종목도 기준가·손절가·익절가·수량은 shadow ledger에 남긴다.
  validation: validate_shadow_ledger_contract_v1.py
- id: I005
  statement: GAS에는 decision/sizing/stop/take_profit/risk_score 계산을 두지 않는다.
  validation: validate_gas_forbidden_logic_ratio_v2.py
- id: I006
  statement: 새 팩터는 lifecycle 필드 14개를 모두 갖기 전 active 금지.
  validation: validate_factor_lifecycle_completeness_v2.py
- id: I007
  statement: release DAG의 모든 inputs는 실행 전 존재하거나 upstream node outputs로 선언되어야 한다.
  validation: validate_release_dag_inputs_exist_v1.py
- id: I008
  statement: renderer_calculation_count는 0이어야 한다.
  validation: validate_renderer_no_calculation_v1.py
- id: I009
  statement: Temp 산출물 버전은 alias registry를 통해서만 읽는다.
  validation: validate_runtime_source_whitelist_v1.py
- id: I010
  statement: replay 성과와 live 운영 성과를 혼입하지 않는다.
  validation: validate_no_replay_live_mix_v2.py
scorecard_formulas:
  release_readiness_score:
    formula: 0.30*dag_pass + 0.20*data_integrity + 0.15*provenance_pass + 0.15*schema_model_parity
      + 0.10*golden_coverage + 0.10*gas_thin_adapter_score
    target: 100
    block_if_below: 95
  factor_activation_score:
    formula: 0.25*expected_edge_stability + 0.20*drawdown_reduction + 0.20*late_entry_avoidance
      + 0.15*data_quality + 0.10*turnover_cost_adjusted_edge + 0.10*conflict_penalty_inverse
    target: '>= 75 for active, 60-74 shadow, <60 retire'
    block_if: sample_count < 50 OR lookback_trading_days < 20 OR data_quality < 95
  repository_entropy_score:
    formula: 100 - max(0,total_files/max_total_files-0.80)*100 - version_sprawl_penalty
      - stale_temp_penalty
    target: '>= 90'
    current_comment: 총 파일 수는 예산 이내이나 tool version groups 35개가 실질 entropy 요인
  llm_reproducibility_score:
    formula: 0.40*packet_section_completeness + 0.25*numeric_json_path_coverage +
      0.20*forbidden_phrase_absence + 0.15*golden_response_match
    target: 100
    block_if_below: 98
refactor_roadmap:
- phase: P0_release_dag_repair
  priority: CRITICAL
  goal: 풀 게이트가 파일명 drift 때문에 중단되지 않도록 artifact alias와 DAG input validation을 먼저 고친다.
  why_first: 엔진이 아무리 좋아도 release DAG가 깨지면 저성능 LLM 실행팩이 생성되지 않고, 운영 보고서가 환각에 노출된다.
  tasks:
  - id: P0-T001
    title: release DAG input 존재성 검증기를 추가
    method: spec/41_release_dag.yaml의 모든 node.inputs를 읽어 존재하지 않는 파일을 목록화한다. 단, upstream
      outputs로 선언된 파일은 허용한다.
    files_to_create:
    - tools/validate_release_dag_inputs_exist_v1.py
    commands:
    - python tools/validate_release_dag_inputs_exist_v1.py --dag spec/41_release_dag.yaml
      --strict
    acceptance:
    - missing_input_count == 0
    - orphan_temp_reference_count == 0
    status: completed
  - id: P0-T002
    title: final_context_for_llm_v5 alias/빌더 확정
    method: Temp/final_context_for_llm_v4.yaml을 v5로 복사하지 말고 build_low_capability_context_pack_v5.py가
      실제로 v5를 생성하도록 package DAG node를 연결한다. 임시 운영은 alias registry로 v4->v5 호환을 명시한다.
    files_to_modify:
    - tools/build_low_capability_context_pack_v5.py
    - spec/41_release_dag.yaml
    files_to_create:
    - spec/release/low_capability_context_aliases.yaml
    acceptance:
    - Temp/final_context_for_llm_v5.yaml exists
    - validate_low_capability PASS
    - validate_llm_regression PASS
    status: completed
  - id: P0-T003
    title: live_replay_separation_v3, late_chase_attribution_v2, shadow_ledger_v2,
      engine_health_card_v1 생성 노드 연결
    method: DAG가 요구하는 모든 Temp artifact에 대해 upstream builder 또는 alias를 명시한다. 존재하지 않는
      산출물을 validator가 바로 읽는 구조를 금지한다.
    files_to_modify:
    - spec/41_release_dag.yaml
    - tools/run_release_dag_v3.py
    acceptance:
    - all_dag_inputs_resolved == true
    - python tools/run_release_dag_v3.py --mode release --strict returns PASS
    status: completed
- phase: P1_repository_diet_and_version_retirement
  priority: HIGH
  goal: 많은 문서와 버전 파일을 active/shadow/retired로 정리해 저성능 LLM의 버전 선택 오류를 제거한다.
  tasks:
  - id: P1-T001
    title: version sprawl audit 도구 추가
    method: 파일명 _vN 패턴을 기준으로 active 최신, shadow 비교, retired archive 대상을 분류한다. active_manifest와
      spec aliases가 없는 버전 파일은 읽기 금지 후보로 표시한다.
    files_to_create:
    - tools/audit_version_sprawl_v1.py
    - spec/release/version_retirement_policy.yaml
    acceptance:
    - unclassified_version_group_count == 0
    - active_version_per_rule <= 1
    status: completed
  - id: P1-T002
    title: AGENTS.md를 운영 인덱스로 고정하고 세부 규칙은 governance/rules로 이동
    method: AGENTS.md는 120줄 이하 목표. 세부 규칙은 governance/rules/*.yaml에 남기고 agents_rule_hashes로
      해시 검증한다.
    files_to_modify:
    - AGENTS.md
    - governance/agents_index.yaml
    - governance/agents_rule_hashes.yaml
    commands:
    - python tools/validate_agents_shrink_v1.py
    acceptance:
    - agents_md_line_count <= 120
    - agents_hash_match_pct == 100
    status: completed
  - id: P1-T003
    title: tools/*.py 핵심 로직 제거와 src/quant_engine 이전
    method: tools는 argparse wrapper만 남긴다. 순수 함수·공식·판단 로직은 src/quant_engine/core 또는
      src/quant_engine/formulas로 이전한다.
    acceptance:
    - tools_business_logic_function_count 감소
    - src_import_coverage 증가
    - unit tests remain PASS
    status: completed
- phase: P2_spec_as_code_contract_unification
  priority: HIGH
  goal: 공식·필드·출력·리스크 계약을 기계 검증 가능한 단일 체계로 묶는다.
  tasks:
  - id: P2-T001
    title: formula registry domain split와 canonical index 동기화
    method: spec/13_formula_registry.yaml은 index와 execution_order만 보유. 세부 공식은 spec/formulas/domains/*.yaml로
      나누되 compile_formula_registry가 단일 registry를 재생성한다.
    files_to_modify:
    - spec/13_formula_registry.yaml
    - spec/formulas/domains/*.yaml
    - src/quant_engine/compile_formula_registry_v1.py
    acceptance:
    - compiled_registry_hash stable
    - formula_count == generated_formula_count == golden_case_count
    status: completed
  - id: P2-T002
    title: output field owner ledger 100% 강제
    method: 모든 output field는 단일 formula owner를 갖는다. owner 충돌 시 release FAIL.
    commands:
    - python tools/validate_output_field_ownership_v1.py --strict
    acceptance:
    - owned_output_field_pct == 100.0
    - authority_collision_count == 0
    status: completed
  - id: P2-T003
    title: registered formulas not in primary execution order를 lifecycle로 분류
    method: execution_order에 없는 100개 공식은 runtime_supplement, renderer_only, deprecated,
      experimental, shadow_only 중 하나로 분류한다.
    files_to_create:
    - spec/formula_lifecycle_index.yaml
    acceptance:
    - unclassified_formula_count == 0
    - deprecated_formula_runtime_reference_count == 0
    status: completed
- phase: P3_gas_thin_adapter_migration
  priority: HIGH
  goal: GAS 20,423라인을 수집/정규화/표시로 제한하고, 판단·사이징·리스크 계산은 Python으로 완전 이전한다.
  tasks:
  - id: P3-T001
    title: GAS forbidden logic ratio 측정
    method: function 단위로 키워드 decision, score, risk, stop, takeProfit, size, gate,
      verdict를 스캔하고 허용 예외를 분리한다.
    files_to_create:
    - tools/validate_gas_forbidden_logic_ratio_v2.py
    acceptance:
    - gas_forbidden_logic_ratio <= 0.05
    - forbidden_responsibility_function_count == 0 before active release
    status: completed
  - id: P3-T002
    title: gas_data_feed.gs 분할 및 adapter parts 정리
    method: 10,302라인/177함수 파일을 collect, normalize, export, display 모듈로 분해하고, business
      logic은 src/quant_engine로 이동한다.
    files_to_modify:
    - gas_data_feed.gs
    - src/gas_adapter_parts/*
    acceptance:
    - largest_gs_file_lines <= 3000
    - GAS call arity validation PASS
    status: completed
  - id: P3-T003
    title: GAS/Python parity golden test
    method: GAS가 산출한 원자료와 Python이 산출한 final packet의 key fields를 샘플별로 대조한다.
    commands:
    - node tools/run_gas_golden_parity.js
    - python tools/validate_gas_thin_adapter_v1.py
    acceptance:
    - gas_python_parity_pct == 100
    - business_logic_in_gas_count == 0
    status: completed
- phase: P4_factor_lifecycle_and_anti_late_entry_upgrade
  priority: HIGH
  goal: 뒷북 매수/설거지 매도를 막기 위해 신규 팩터를 shadow 성과 기반으로만 active 승격한다.
  tasks:
  - id: P4-T001
    title: 팩터 lifecycle 14필드 강제
    method: spec/43_quant_factor_taxonomy.yaml의 required_lifecycle_fields를 모든 팩터에
      적용한다.
    files_to_create:
    - tools/validate_factor_lifecycle_completeness_v2.py
    acceptance:
    - factor_lifecycle_completeness_pct == 100
    status: completed
  - id: P4-T002
    title: anti-late-entry gate를 price extension + volume climax + smart money divergence로
      삼중화
    method: 신고가 추격 매수는 20D/60D 이격, 당일 거래대금 과열, 외국인/기관 순매수 둔화, 윗꼬리/갭상승 피로도를 합산해 차단한다.
    files_to_modify:
    - spec/strategy/anti_late_entry_pullback_gate_v5.yaml
    - spec/13_formula_registry.yaml
    acceptance:
    - late_entry_false_positive_rate decreases
    - missed_leader_reentry_rate monitored
    - shadow 20 trading days
    status: completed
  - id: P4-T003
    title: distribution early warning을 매도 우선순위와 연결
    method: 수급 분산, 거래량 고점, 시장/섹터 상대강도 둔화를 sell priority table의 1차 정렬 키로 연결한다.
    acceptance:
    - sell_candidate_count>=2이면 sell priority table 먼저 출력
    - profit_giveback_reduction measured
    status: completed
- phase: P5_low_capability_llm_execution_pack
  priority: CRITICAL
  goal: 저성능 LLM도 숫자를 만들지 않고 packet을 복사·요약만 하게 만든다.
  tasks:
  - id: P5-T001
    title: final_context_for_llm_v5 고정 섹션 구현
    method: executive, blockers, action_table, shadow_ledger, data_missing, education_notes
      순서를 강제한다. 각 숫자 필드는 value, unit, json_path, formula_id를 포함한다.
    files_to_modify:
    - tools/build_low_capability_context_pack_v5.py
    - spec/46_low_capability_execution_pack.yaml
    acceptance:
    - required_sections_present_pct == 100
    - numeric_json_path_coverage == 100
    status: completed
  - id: P5-T002
    title: LLM 응답 golden regression 추가
    method: 동일 final_context에 대해 sample_response.json과 섹션/금지문구/숫자 경로 일치를 검증한다.
    commands:
    - python tools/run_low_capability_llm_regression_v1.py --strict
    acceptance:
    - golden_response_match_pct >= 98
    - llm_generated_number_count == 0
    status: completed
  - id: P5-T003
    title: blocked 상태 주문표 누출 차단
    method: global_execution_gate가 HTS_READY가 아니면 order table 대신 shadow ledger와 no_order_notice만
      렌더한다.
    acceptance:
    - hidden_order_leak_count == 0
    - blocked_actions_rendered == true
    status: completed
- phase: P6_observability_and_feedback_loop
  priority: MEDIUM
  goal: 엔진이 실제로 예측을 맞히는지, 수익을 지키는지 매주 수치로 평가한다.
  tasks:
  - id: P6-T001
    title: prediction/outcome ledger와 proposal evaluation history 연결
    method: 추천 시점의 signal, price, stop, target, gate, confidence를 저장하고 D+1/D+5/D+20
      성과를 outcome으로 붙인다.
    commands:
    - npm run daily-feedback-report
    acceptance:
    - prediction_match_rate_pct tracked
    - edge_by_factor table exists
    - live/replay separated
    status: completed
  - id: P6-T002
    title: engine health card 생성
    method: release readiness, data integrity, provenance, prediction accuracy, gas
      thinness, entropy score를 한 장으로 만든다.
    files_to_create:
    - tools/build_engine_health_card_v1.py
    acceptance:
    - Temp/engine_health_card_v1.json exists
    - health_score >= 95 for release
    status: completed
  - id: P6-T003
    title: 월 1/11/21 중간점검과 주말 리밸런싱을 운영 캘린더에 코드화
    method: spec/operating_cadence.yaml에 날짜 규칙을 두고 report renderer가 해당 날짜에 중간점검/리밸런싱
      섹션을 강제한다.
    acceptance:
    - cadence_section_missing_count == 0
    status: completed
low_capability_llm_todo_protocol:
  purpose: 저성능 LLM이 아래 순서만 수행하면 동일한 판단을 재현한다.
  mandatory_order:
  - 1_read_AGENTS_md_index_only
  - 2_read_runtime_active_artifact_manifest
  - 3_resolve_final_decision_packet_active_alias
  - 4_read_final_context_for_llm_v5_only
  - 5_copy_numbers_with_json_path_only
  - 6_apply_execution_authority_matrix
  - 7_render_fixed_sections
  - 8_emit_DATA_MISSING_for_any_gap
  - 9_never_invent_price_qty_tp_sl_score
  - 10_never_override_harness_gate
  input_whitelist:
  - runtime/active_artifact_manifest.yaml
  - Temp/final_decision_packet_active.json
  - Temp/final_context_for_llm_v5.yaml
  - Temp/operational_report.json
  - Temp/number_provenance_ledger_v4.json
  - spec/31_low_capability_llm_response_contract.yaml
  - spec/execution_authority_matrix_v2.yaml
  output_sections_fixed:
  - source_summary
  - portfolio_health
  - blockers
  - allowed_actions
  - blocked_actions
  - action_table_or_shadow_ledger
  - data_missing
  - education_notes
  - todo_yaml
  - no_order_notice
  forbidden:
  - freeform target price
  - freeform quantity
  - 임의 손절/익절 산출
  - 하네스 미제공 수치 보간
  - blocked 상태에서 주문표 생성
  - replay 성과를 live 성과처럼 표현
  copy_rule: 숫자는 value/unit/json_path/formula_id가 함께 있는 필드만 복사한다. 없으면 DATA_MISSING으로
    표시한다.
algorithm_governance_todo:
- id: AG-T001
  category: new_factor_intake
  instruction: 새 투자 아이디어는 즉시 공식화하지 말고 factor_intake.yaml에 가설, 대상 시장, 적용 국면, 기대 엣지,
    실패 조건부터 적는다.
  template_fields:
  - factor_id
  - hypothesis
  - horizon
  - decay_half_life
  - input_fields
  - expected_edge_formula
  - conflict_precedence
  - activation_threshold
  - retirement_condition
  - owner
  done_when: validate_factor_lifecycle_completeness_v2.py PASS
- id: AG-T002
  category: activation_gate
  instruction: shadow 기간 없이 active 금지. 최소 20거래일 또는 50건 신호, 데이터 품질 95 이상, turnover
    cost 차감 후 edge 양수여야 한다.
  done_when: factor_activation_score >= 75
- id: AG-T003
  category: conflict_resolution
  instruction: 수급·모멘텀은 매수 신호라도 데이터 품질, 현금 방어선, 시장위험, 손절 총위험, anti-late-entry gate보다
    우선할 수 없다.
  precedence_order:
  - data_quality
  - portfolio_health
  - cash
  - heat
  - stop_tp
  - anti_chase
  - regime
  - sector_beta
  - style
  - sizing
  - execution
- id: AG-T004
  category: overfitting_brake
  instruction: 새 팩터가 기존 팩터와 0.80 이상 상관이면 통합하거나 폐기한다. 같은 현상을 이름만 바꿔 추가하지 않는다.
  done_when: factor_correlation_collision_count == 0
- id: AG-T005
  category: profit_preservation
  instruction: 수익 발생 후에는 신규 알파보다 giveback 방지가 우선이다. trailing stop, profit ratchet,
    distribution warning을 sell waterfall에 먼저 반영한다.
  done_when: profit_giveback_after_peak_pct decreases over 20D evaluation
developer_todo_backlog:
- id: DEV-001
  priority: P0
  task: tools/validate_release_dag_inputs_exist_v1.py 작성
  exact_steps:
  - YAML 파서로 spec/41_release_dag.yaml 로드
  - 모든 node.inputs 수집
  - 모든 node.outputs 수집
  - input이 파일로 존재하지 않고 outputs에도 없으면 missing으로 기록
  - --strict이면 missing_count>0에서 exit 1
  acceptance: missing_input_count == 0
- id: DEV-002
  priority: P0
  task: Temp/final_context_for_llm_v5.yaml 생성 경로 복구
  exact_steps:
  - build_low_capability_context_pack_v5.py가 존재하면 출력 경로를 v5로 고정
  - 없으면 build_final_context_for_llm_v4.py를 wrapper로 호출하되 schema_version을 v5로 승격하지
    말고 compatibility_alias에 기록
  - spec/41_release_dag.yaml validate_low_capability input과 builder output 일치
  acceptance: validate_low_capability PASS
- id: DEV-003
  priority: P0
  task: release DAG에 missing artifact upstream builder 연결
  exact_steps:
  - live_replay_separation_v3 builder 확인
  - late_chase_attribution_v2 builder 확인
  - shadow_ledger_v2 builder 확인
  - engine_health_card_v1 builder 추가
  - DAG depends_on 순서 갱신
  acceptance: run_release_dag_v3 release strict PASS
- id: DEV-004
  priority: P1
  task: version_sprawl_audit 구현
  exact_steps:
  - _vN 패턴 그룹화
  - manifest/aliases에 active로 지정된 최신 하나만 허용
  - 나머지는 shadow 또는 retired로 분류
  - unclassified는 release fail
  acceptance: unclassified_version_group_count == 0
- id: DEV-005
  priority: P1
  task: GAS forbidden logic scanner 구현
  exact_steps:
  - gas_*.gs function body 추출
  - forbidden 키워드 decision/sizing/stop/take_profit/risk_score/verdict 스캔
  - allowed exception table 적용
  - 파일별 forbidden_count와 ratio 출력
  acceptance: forbidden_count == 0 or approved_exception_count only
- id: DEV-006
  priority: P1
  task: tools business logic src 이전
  exact_steps:
  - tools/*.py에서 순수 계산 함수 탐지
  - src/quant_engine/core로 이동
  - tools는 import 후 CLI만 수행
  - 기존 명령어 backward compatibility 유지
  acceptance: unit/parity tests PASS
- id: DEV-007
  priority: P1
  task: formula lifecycle index 생성
  exact_steps:
  - spec/13_formula_registry.yaml의 모든 formula_id 수집
  - execution_order 포함 여부 계산
  - 각 formula에 active/shadow/experimental/deprecated/runtime_supplement 지정
  - deprecated runtime reference 차단
  acceptance: unclassified_formula_count == 0
- id: DEV-008
  priority: P2
  task: llm numeric generation validator 구현
  exact_steps:
  - operational_report.md의 모든 숫자 토큰 추출
  - number_provenance_ledger와 매칭
  - 매칭 불가 숫자 허용목록 제외 후 fail
  - 문장 내 target/stop/qty가 provenance 없으면 fail
  acceptance: unprovenanced_number_count == 0
- id: DEV-009
  priority: P2
  task: final decision packet contract 강화
  exact_steps:
  - action_table 각 행에 gate_status, reason_code, price_fields, qty_fields, provenance
    포함
  - blocked row도 shadow_ledger_ref 포함
  - schema validation 추가
  acceptance: final_packet_schema_validation PASS
- id: DEV-010
  priority: P2
  task: engine health card builder 작성
  exact_steps:
  - release_dag_run_v3, active_manifest, number_provenance, prediction_accuracy, gas_thin_adapter,
    entropy audit 입력
  - health_score 계산
  - critical_blockers 배열 출력
  acceptance: Temp/engine_health_card_v1.json exists
- id: DEV-011
  priority: P2
  task: factor activation dashboard 구현
  exact_steps:
  - proposal_evaluation_history에서 factor별 D+1/D+5/D+20 edge 집계
  - turnover cost 차감
  - drawdown/giveback 계산
  - active/shadow/retire 추천
  acceptance: factor_activation_score per factor exists
- id: DEV-012
  priority: P3
  task: repository diet policy 적용
  exact_steps:
  - Temp stale artifact archive
  - docs 중복 ADR 통합
  - dist 대용량 yaml은 source whitelist 제외
  - package zip whitelist 갱신
  acceptance: repo_entropy_score >= 90
pm_execution_plan:
  week_1:
  - P0 release DAG repair
  - final_context_for_llm_v5 생성
  - DAG input validator
  - engine_health_card skeleton
  week_2:
  - version sprawl audit
  - formula lifecycle index
  - LLM numeric validator
  - low capability regression
  week_3:
  - GAS forbidden scanner
  - gas_data_feed.gs 분할 시작
  - tools business logic src 이전 1차
  week_4:
  - factor activation dashboard
  - anti-late-entry 삼중 게이트 shadow
  - sell waterfall distribution 연결
  monthly_review:
  - 1일/11일/21일 중간점검 자동 섹션 검증
  - 성과·오탐·미탐·수익보존 지표 검토
  - retire 대상 팩터 제거
release_gate_commands_target:
- python tools/validate_release_dag_inputs_exist_v1.py --dag spec/41_release_dag.yaml
  --strict
- python tools/validate_specs.py
- python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml
  --strict
- python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json
  --report Temp/operational_report.md
- python tools/validate_low_capability_pack_v1.py --context Temp/final_context_for_llm_v5.yaml
  --contract spec/46_low_capability_execution_pack.yaml
- python tools/validate_golden_coverage_100.py
- python tools/validate_schema_model_generation_v1.py
- python tools/validate_gas_thin_adapter_v1.py
- python tools/validate_factor_lifecycle_completeness_v2.py --taxonomy spec/43_quant_factor_taxonomy.yaml
- python tools/validate_gas_forbidden_logic_ratio_v2.py --strict
- python tools/validate_llm_no_numeric_generation_v1.py --report Temp/operational_report.md
  --ledger Temp/number_provenance_ledger_v4.json
- python tools/run_release_dag_v3.py --mode release --strict
definition_of_done:
  engine_refactor_done:
  - release DAG strict PASS
  - final_context_for_llm_v5 존재 및 validate_low_capability PASS
  - all DAG inputs resolved
  - formula_count == generated_formula_count == golden_case_count
  - number provenance coverage 100%
  - renderer calculation count 0
  - GAS forbidden business logic count 0 또는 승인 예외만 존재
  - unclassified version group count 0
  - unclassified formula lifecycle count 0
  - low capability LLM regression >= 98%
  - repository entropy score >= 90
  quant_engine_quality_done:
  - prediction_match_rate_pct가 주간 리포트에 추적됨
  - late_entry false positive가 감소 추세
  - profit giveback after peak가 감소 추세
  - drawdown guard breach 후 대응이 shadow ledger에 기록됨
  - 신규 active 팩터는 모두 shadow evidence를 통과
senior_architect_final_call:
  decision: 지금 필요한 것은 기능 추가가 아니라 운영 하네스의 봉합과 단일 실행 경로 확정이다.
  first_3_actions:
  - release DAG missing input 5종 복구
  - final_context_for_llm_v5를 저성능 LLM의 유일한 입력팩으로 확정
  - version sprawl과 GAS forbidden logic을 수치로 측정해 active 경로에서 제거
  do_not_do:
  - 새 팩터를 바로 active 추가하지 말 것
  - 깨진 DAG를 skip 옵션으로 우회하지 말 것
  - Temp 파일을 손으로 복사해 PASS처럼 보이게 하지 말 것
  - 보고서 문장을 늘려 문제를 해결하려 하지 말 것
