document:
  id: quant_engine_refactor_master_todo_v1
  title: 저성능 LLM용 퀀트투자 엔진 리팩토링 마스터 TODO
  version: 1.0.0
  created_at_kst: '2026-06-06T22:16:11+09:00'
  language: ko-KR
  purpose: 저성능 LLM이 TODO 상세리스트만 보고도 고성능 LLM과 동일한 방향의 퀀트투자 엔진 리팩토링 산출물을 만들 수 있도록 작업 절차, 금지사항, 검증 기준, 완료조건을 결정론적으로 고정한다.
  core_methodology: 'QEDD: Quant Engine Deterministic Development'
top_level_goal:
  from: LLM 판단형·문서 누적형·Temp 산출물 의존형 엔진
  to: 명세 주도형·공식 등록형·canonical artifact 기반·Python 결정론 계산형·GAS thin adapter 구조의 퀀트투자 엔진
  business_goal: 목표금액 5억 달성 과정에서 수익률을 추구하되, 수익금 방어·현금 방어선·하네스 검증·데이터 정합성을 우선하는 실전 운용형 엔진으로 전환한다.
non_negotiable_rules_for_low_capability_llm:
- LLM은 투자 판단자가 아니라 리팩토링 실행자다.
- 가격·수량·비율·점수·목표가·손절가·익절가를 새로 만들지 않는다.
- spec/13_formula_registry.yaml 또는 정규화된 formula_registry에 없는 formula_id를 만들지 않는다.
- Temp의 다중 버전 파일을 runtime source로 직접 사용하지 않는다.
- canonical_manifest에 지정된 파일만 runtime source로 인정한다.
- replay 성과를 live 성과처럼 표현하지 않는다.
- live T+20 표본 30건 미만이면 active 또는 PASS_100으로 승격하지 않는다.
- 검증 실패를 설명이나 문장으로 우회하지 않는다.
- 파일이 없거나 수치 출처가 없으면 DATA_MISSING으로 표시한다.
- GAS에 신규 투자 판단 로직을 추가하지 않는다.
- 프롬프트에 가격·수량·임계값 계산 지시를 추가하지 않는다.
- 하네스 FAIL 상태에서 주문표를 실행 가능 상태로 렌더링하지 않는다.
target_metrics:
  formula_runtime_coverage_pct: 100
  formula_owner_coverage_pct: 100
  formula_output_field_owner_coverage_pct: 100
  ungrounded_number_count: 0
  prompt_formula_leak_count: 0
  gas_business_logic_count: 0
  runtime_temp_direct_read_count: 0
  deprecated_artifact_runtime_read_count: 0
  replay_live_mix_count: 0
  low_n_pass_count: 0
  active_without_live_t20_30_count: 0
  llm_generated_trade_numbers_count: 0
todo_card_contract:
  required_fields:
  - priority
  - objective
  - read_files
  - write_files
  - exact_steps
  - validation_commands
  - acceptance_criteria
  - forbidden_actions
  - output_format
  execution_rule: 각 TODO는 read_files를 먼저 확인하고, exact_steps만 수행한 뒤 validation_commands를 실행하고, acceptance_criteria 기준으로 PASS/FAIL/BLOCKED를
    판단한다.
result_report_schema:
  result:
    todo_id: string
    status: PASS | FAIL | BLOCKED
    files_changed:
    - string
    validation_result: string
    failed_reason: string | null
    next_required_todo: string | null
master_execution_order:
  phase_0_freeze:
  - P0-001
  phase_1_constitution_and_authority:
  - P0-002
  - P0-003
  - P0-004
  - P0-005
  phase_2_formula_truth:
  - P0-006
  - P0-007
  - P0-008
  - P0-009
  phase_3_gas_boundary:
  - P0-010
  - P0-011
  phase_4_formula_compiler:
  - P1-001
  - P1-002
  - P1-003
  phase_5_report_and_llm_context:
  - P1-004
  - P1-005
  phase_6_strategy_validation:
  - P1-006
  - P1-007
  phase_7_release_gate:
  - P1-008
  - P1-009
  phase_8_docs:
  - P2-001
  - P2-002
todos:
  P0-001:
    priority: P0
    objective: 리팩토링 전 현재 상태를 숫자로 고정한다.
    read_files:
    - AGENTS.md
    - package.json
    - spec/
    - prompts/
    - tools/
    - Temp/
    - GatherTradingData.json
    write_files:
    - Temp/refactor_baseline_inventory_v1.json
    exact_steps:
    - 전체 파일 수를 계산한다.
    - 확장자별 파일 수를 계산한다.
    - Temp 파일 수를 계산한다.
    - .gs 파일별 라인 수와 전체 라인 수를 계산한다.
    - tools/*.py 개수를 계산한다.
    - spec/*.yaml 개수를 계산한다.
    - prompts/*.md 개수를 계산한다.
    - package.json scripts 개수를 계산한다.
    - 결과를 JSON으로 저장한다.
    validation_commands:
    - python tools/validate_specs.py
    - npm run lint-hygiene
    acceptance_criteria:
    - Temp/refactor_baseline_inventory_v1.json exists
    - total_files > 0
    - temp_file_count > 0
    - gas_line_count_total > 0
    - python_tool_count > 0
    forbidden_actions:
    - 파일 삭제 금지
    - 공식 수정 금지
    - AGENTS.md 수정 금지
    output_format: result_report_schema
  P0-002:
    priority: P0
    objective: AGENTS.md를 거대 규칙집에서 최상위 헌법으로 축소하기 위한 후보 파일을 만든다.
    read_files:
    - AGENTS.md
    - spec/00_execution_contract.yaml
    - spec/33_execution_precedence_lock.yaml
    - spec/34_architecture_boundaries.yaml
    - spec/35_rule_lifecycle_governance_v3.yaml
    write_files:
    - docs/proposed_AGENTS_constitution_v1.md
    - docs/agents_rule_extraction_map_v1.yaml
    exact_steps:
    - AGENTS.md에서 Hard-Lock, 금지사항, 우선순위, 출력규칙을 분류한다.
    - 중복 규칙을 하나의 rule_key로 묶는다.
    - AGENTS.md에 남길 최상위 원칙 12개 이하만 추출한다.
    - 세부 규칙은 spec 파일로 이동할 위치를 매핑한다.
    - 원문 파일은 삭제하거나 직접 축소하지 않는다.
    validation_commands:
    - python tools/validate_specs.py
    acceptance_criteria:
    - docs/proposed_AGENTS_constitution_v1.md exists
    - docs/agents_rule_extraction_map_v1.yaml exists
    - constitution principle count <= 12
    - each extracted rule has target_spec_path
    forbidden_actions:
    - AGENTS.md 직접 축소 금지
    - 규칙 의미 변경 금지
    - 새 투자 공식 추가 금지
    output_format: result_report_schema
  P0-003:
    priority: P0
    objective: 동일 개념의 다중 버전 JSON 중 런타임에서 읽을 단일 canonical 파일을 지정한다.
    read_files:
    - spec/32_canonical_artifact_resolver.yaml
    - Temp/
    write_files:
    - artifacts/canonical_manifest.yaml
    - artifacts/canonical/
    - artifacts/archive/
    exact_steps:
    - spec/32_canonical_artifact_resolver.yaml의 canonical_versions를 읽는다.
    - 각 개념별 canonical 파일명을 확인한다.
    - canonical 파일을 artifacts/canonical/ 아래 안정 경로로 복사한다.
    - deprecated 파일은 artifacts/archive/YYYY-MM-DD/ 아래로 복사한다.
    - canonical_manifest.yaml에 concept, canonical_path, source_file, deprecated_files를 기록한다.
    validation_commands:
    - python tools/validate_specs.py
    - python tools/build_canonical_artifact_resolver_v1.py
    acceptance_criteria:
    - artifacts/canonical_manifest.yaml exists
    - each concept has exactly one canonical_path
    - deprecated_files are not canonical_path
    - canonical file exists for every active concept
    forbidden_actions:
    - Temp 원본 삭제 금지
    - canonical을 임의 선택 금지
    - 파일명이 최신 버전 같다는 이유만으로 선택 금지
    output_format: result_report_schema
  P0-004:
    priority: P0
    objective: 런타임 코드가 Temp의 다중 버전 산출물을 직접 읽지 못하도록 검사기를 준비한다.
    read_files:
    - tools/
    - package.json
    - artifacts/canonical_manifest.yaml
    write_files:
    - tools/validate_no_temp_runtime_read_v1.py
    - spec/38_runtime_artifact_read_policy.yaml
    exact_steps:
    - tools/*.py에서 'Temp/' 문자열 사용 위치를 검색한다.
    - package.json scripts에서 Temp 입력 파일을 검색한다.
    - '허용 목록을 만든다: build output, audit output, archive output.'
    - '금지 목록을 만든다: decision input, report input, gate input.'
    - runtime input으로 Temp/*.json을 읽으면 FAIL 처리한다.
    - canonical_manifest 경유 입력이면 PASS 처리한다.
    validation_commands:
    - python tools/validate_no_temp_runtime_read_v1.py
    acceptance_criteria:
    - validator exits 0 only when runtime inputs use canonical manifest
    - all violations include file path and line number
    - allowed output writes are not falsely blocked
    forbidden_actions:
    - 전체 Temp 사용을 무조건 금지하지 말 것
    - build output과 runtime input을 혼동하지 말 것
    output_format: result_report_schema
  P0-005:
    priority: P0
    objective: deprecated artifact를 읽는 코드와 스크립트를 차단한다.
    read_files:
    - artifacts/canonical_manifest.yaml
    - spec/32_canonical_artifact_resolver.yaml
    - tools/
    - package.json
    write_files:
    - tools/validate_deprecated_artifact_read_v1.py
    exact_steps:
    - deprecated artifact 파일명 목록을 canonical_manifest에서 읽는다.
    - tools/*.py와 package.json에서 해당 파일명을 검색한다.
    - deprecated 파일이 입력으로 사용되면 FAIL 처리한다.
    - deprecated 파일이 archive 또는 audit 설명에만 나오면 PASS 처리한다.
    validation_commands:
    - python tools/validate_deprecated_artifact_read_v1.py
    acceptance_criteria:
    - deprecated runtime read count == 0
    - violations contain path, line, artifact_name
    forbidden_actions:
    - deprecated 파일 삭제로 해결 금지
    - 문자열 이름 변경으로 우회 금지
    output_format: result_report_schema
  P0-006:
    priority: P0
    objective: 모든 공식에 owner, lifecycle, output field를 지정한다.
    read_files:
    - spec/13_formula_registry.yaml
    - spec/35_rule_lifecycle_governance_v3.yaml
    - spec/ownership_map.yaml
    write_files:
    - spec/03_formulas/formula_registry.normalized.yaml
    - Temp/formula_owner_coverage_v1.json
    exact_steps:
    - spec/13_formula_registry.yaml의 모든 formula_id를 추출한다.
    - 각 formula_id에 owner가 있는지 확인한다.
    - 각 formula_id에 status가 있는지 확인한다.
    - 각 formula_id에 output_fields가 있는지 확인한다.
    - 누락된 항목은 임의 보완하지 말고 MISSING으로 기록한다.
    - normalized 파일에는 기존 값을 그대로 복사하고 누락 필드는 TODO_REQUIRED로 표시한다.
    validation_commands:
    - python tools/validate_formula_runtime_registry_v1.py
    - python tools/validate_golden_coverage_100.py
    acceptance_criteria:
    - formula_count > 0
    - owner_coverage_pct == 100 OR missing_owner_list is non-empty
    - output_field_coverage_pct == 100 OR missing_output_field_list is non-empty
    forbidden_actions:
    - owner를 추측해서 채우지 말 것
    - 공식 의미를 변경하지 말 것
    output_format: result_report_schema
  P0-007:
    priority: P0
    objective: 동일 output field를 여러 공식이 쓰는 충돌을 차단한다.
    read_files:
    - spec/13_formula_registry.yaml
    - spec/ownership_map.yaml
    write_files:
    - spec/03_formulas/output_field_owner_ledger.yaml
    - tools/validate_output_field_owner_collision_v1.py
    exact_steps:
    - 모든 formula_id의 output field를 추출한다.
    - field별 writer formula 목록을 만든다.
    - writer가 2개 이상이면 precedence_required로 표시한다.
    - precedence가 없으면 FAIL 처리한다.
    - reader formula와 writer formula를 분리한다.
    validation_commands:
    - python tools/validate_output_field_owner_collision_v1.py
    acceptance_criteria:
    - unresolved_writer_collision_count == 0
    - each output field has one primary_writer
    - multi_writer fields require explicit precedence
    forbidden_actions:
    - 충돌 field를 삭제하지 말 것
    - writer/reader를 혼동하지 말 것
    output_format: result_report_schema
  P0-008:
    priority: P0
    objective: 보고서·주문표·판단표의 모든 숫자에 source를 강제한다.
    read_files:
    - Temp/operational_report.json
    - Temp/operational_report.md
    - tools/validate_number_provenance_v1.py
    - prompts/
    write_files:
    - spec/06_output/number_provenance_contract.yaml
    - tools/validate_number_provenance_strict_v2.py
    exact_steps:
    - operational_report.json의 숫자 필드를 전부 스캔한다.
    - 각 숫자에 source_json, source_field, formula_id가 있는지 확인한다.
    - 'markdown 보고서의 주문표 숫자에 [src: ...] 표기가 있는지 확인한다.'
    - 없는 숫자는 INVALID_UNGROUNDED_NUMBER로 분류한다.
    validation_commands:
    - python tools/validate_number_provenance_v1.py
    - python tools/validate_number_provenance_strict_v2.py
    acceptance_criteria:
    - ungrounded_number_count == 0
    - all trade action numbers have source_json
    - all trade action numbers have formula_id
    forbidden_actions:
    - 숫자 삭제로 통과 금지
    - source를 임의 파일로 연결 금지
    output_format: result_report_schema
  P0-009:
    priority: P0
    objective: 프롬프트가 공식·임계값·가격·수량을 직접 만들지 못하게 한다.
    read_files:
    - prompts/
    - spec/13_formula_registry.yaml
    write_files:
    - tools/validate_prompt_formula_leak_v1.py
    - Temp/prompt_formula_leak_audit_v1.json
    exact_steps:
    - prompts/*.md에서 원화 가격 패턴을 검색한다.
    - 비율 임계값 패턴을 검색한다.
    - '''계산'', ''산출'', ''조정'', ''약'', ''대략'', ''상황에 따라'' 문맥을 검색한다.'
    - formula_id 인용 없이 숫자 산출을 지시하면 FAIL 처리한다.
    - prompt는 renderer 역할만 하도록 수정 후보를 기록한다.
    validation_commands:
    - python tools/validate_prompt_formula_leak_v1.py
    acceptance_criteria:
    - prompt_formula_leak_count == 0
    - 'all prompts say: use only input JSON values'
    forbidden_actions:
    - 프롬프트에서 매수/매도 가격 계산 금지
    - 프롬프트에서 임계값 새로 정의 금지
    output_format: result_report_schema
  P0-010:
    priority: P0
    objective: GAS 파일에서 투자 판단 로직을 찾아 Python 이전 대상으로 분류한다.
    read_files:
    - gas_apex_alpha_watch.gs
    - gas_apex_runtime_core.gs
    - gas_data_collect.gs
    - gas_data_feed.gs
    - gas_harness_rows.gs
    - gas_lib.gs
    - gas_report.gs
    write_files:
    - Temp/gas_business_logic_audit_v1.json
    - spec/34_architecture_boundaries.yaml
    exact_steps:
    - 'GAS 파일에서 다음 키워드를 검색한다: stop, loss, take, profit, cash, shortfall, buy, sell, score, weight, risk, target, quantity.'
    - 각 위치를 collect, normalize, export, render, business_logic 중 하나로 분류한다.
    - business_logic으로 분류된 함수는 Python 이전 후보로 기록한다.
    - GAS에 남길 함수와 제거할 함수를 분리한다.
    validation_commands:
    - python tools/validate_gas_call_arity.py
    acceptance_criteria:
    - gas_business_logic_audit_v1.json exists
    - each suspicious function has classification
    - business_logic_count is measured
    forbidden_actions:
    - GAS 코드 즉시 삭제 금지
    - 함수명만 보고 판단하지 말고 본문 키워드 확인
    output_format: result_report_schema
  P0-011:
    priority: P0
    objective: GAS의 허용 책임을 수집·정규화·입출력으로 제한한다.
    read_files:
    - Temp/gas_business_logic_audit_v1.json
    - spec/34_architecture_boundaries.yaml
    write_files:
    - spec/34_architecture_boundaries.yaml
    - spec/39_gas_thin_adapter_policy.yaml
    - tools/validate_gas_thin_adapter_v1.py
    exact_steps:
    - 'GAS 허용 함수 유형을 정의한다: collect, normalize, export, display.'
    - 'GAS 금지 함수 유형을 정의한다: decision, sizing, stop_loss, take_profit, risk_score.'
    - validate_gas_thin_adapter_v1.py가 금지 키워드와 함수 분류를 검사하게 한다.
    validation_commands:
    - python tools/validate_gas_thin_adapter_v1.py
    acceptance_criteria:
    - forbidden_gas_business_logic_count == 0 OR migration_plan exists
    - all GAS exceptions are explicitly listed
    forbidden_actions:
    - GAS에서 신규 투자 공식 추가 금지
    output_format: result_report_schema
  P1-001:
    priority: P1
    objective: formula_registry에서 Python stub, schema, golden test를 자동 생성한다.
    read_files:
    - spec/13_formula_registry.yaml
    - spec/formula_golden_cases_v4.yaml
    write_files:
    - tools/compile_formula_registry_v1.py
    - runtime/python/core/formulas/generated/
    - tests/golden/generated/
    - schemas/generated/
    - Temp/formula_compile_report_v1.json
    exact_steps:
    - formula_registry를 읽는다.
    - formula_id별 inputs, outputs, owner, status를 추출한다.
    - 공식별 Python stub 파일을 생성한다.
    - 공식별 golden test stub을 생성한다.
    - 공식별 JSON schema fragment를 생성한다.
    - formula_dependency_graph.json을 생성한다.
    validation_commands:
    - python tools/compile_formula_registry_v1.py --dry-run
    - python tools/validate_formula_golden_cases.py
    - python tools/validate_golden_coverage_100.py
    acceptance_criteria:
    - compile_report.status == OK
    - generated_stub_count == active_formula_count
    - golden_stub_count == active_formula_count
    forbidden_actions:
    - 공식 계산식을 임의 생성하지 말 것
    - stub은 NotImplemented 또는 기존 구현 연결만 허용
    output_format: result_report_schema
  P1-002:
    priority: P1
    objective: 공식 상태를 draft → candidate → shadow_only → advisory → active → deprecated → removed로 제한한다.
    read_files:
    - spec/35_rule_lifecycle_governance_v3.yaml
    - spec/13_formula_registry.yaml
    write_files:
    - spec/00_governance/rule_lifecycle.yaml
    - tools/validate_rule_lifecycle_strict_v1.py
    exact_steps:
    - 허용 status enum을 정의한다.
    - active 승격 조건을 정의한다.
    - shadow_only 최소 live T+20 표본 30건 조건을 정의한다.
    - deprecated 공식이 runtime input에 사용되면 FAIL 처리한다.
    - removed 공식이 문서 외부에서 참조되면 FAIL 처리한다.
    validation_commands:
    - python tools/validate_rule_lifecycle_policy.py
    - python tools/validate_rule_lifecycle_strict_v1.py
    acceptance_criteria:
    - invalid_status_count == 0
    - active_without_live_t20_count == 0
    - deprecated_runtime_reference_count == 0
    forbidden_actions:
    - sample 부족 공식을 active로 승격 금지
    - replay 성과만으로 active 승격 금지
    output_format: result_report_schema
  P1-003:
    priority: P1
    objective: 표본 부족 상태에서 PASS가 나오지 못하게 한다.
    read_files:
    - Temp/continuous_evaluation_dashboard_v1.json
    - Temp/pass_100_criteria_v3.json
    - Temp/algorithm_guidance_proof_v1.json
    write_files:
    - tools/validate_low_n_pass_gate_v1.py
    - spec/37_evaluation_dashboard_contract.yaml
    exact_steps:
    - live T+20 표본 수를 읽는다.
    - min_required와 current_live_t20을 비교한다.
    - current_live_t20 < min_required이면 performance_ready는 FAIL이어야 한다.
    - 이 상태에서 PASS_100 또는 active 승격이 있으면 FAIL 처리한다.
    validation_commands:
    - python tools/validate_low_n_pass_gate_v1.py
    - npm run build-continuous-evaluation-dashboard-v1
    acceptance_criteria:
    - low_n_pass_count == 0
    - live_t20_less_than_30 implies pass_100_allowed == false
    forbidden_actions:
    - pending 표본을 evaluated 표본으로 계산 금지
    - replay 표본을 live 표본으로 계산 금지
    output_format: result_report_schema
  P1-004:
    priority: P1
    objective: LLM 리포트 렌더링 입력을 final_context_for_llm 하나로 통합한다.
    read_files:
    - Temp/final_context_for_llm_v1.json
    - Temp/final_context_for_llm_v2.json
    - Temp/final_context_for_llm_v3.json
    - Temp/operational_report.json
    - artifacts/canonical_manifest.yaml
    write_files:
    - artifacts/canonical/final_context_for_llm.json
    - schemas/final_context_for_llm.schema.json
    - tools/validate_final_context_for_llm_v1.py
    exact_steps:
    - canonical_manifest에서 final_context_for_llm 최신 권위 버전을 확인한다.
    - canonical/final_context_for_llm.json으로 안정 경로를 만든다.
    - 리포트 렌더러는 이 파일만 읽게 한다.
    - schema를 만들어 필수 필드를 고정한다.
    validation_commands:
    - python tools/validate_final_context_for_llm_v1.py
    - python tools/validate_operational_report_contract.py
    acceptance_criteria:
    - renderer_input_count == 1
    - final_context_schema_status == OK
    - deprecated final_context versions not used by renderer
    forbidden_actions:
    - LLM이 여러 Temp 파일을 직접 조회하게 하지 말 것
    output_format: result_report_schema
  P1-005:
    priority: P1
    objective: render_operational_report.py가 계산하지 않고 렌더링만 하도록 제한한다.
    read_files:
    - tools/render_operational_report.py
    - spec/34_architecture_boundaries.yaml
    write_files:
    - tools/validate_renderer_no_calculation_v1.py
    exact_steps:
    - render_operational_report.py에서 산술 연산 위치를 검색한다.
    - '허용: 문자열 포맷, 표 렌더링, null 표시.'
    - '금지: 가격 계산, 수량 계산, 점수 계산, 게이트 재판정.'
    - 금지 로직 발견 시 formula builder로 이전 후보를 기록한다.
    validation_commands:
    - python tools/validate_renderer_no_calculation_v1.py
    acceptance_criteria:
    - renderer_calculation_count == 0
    - renderer_gate_redecision_count == 0
    forbidden_actions:
    - 렌더러에서 수치 보정 금지
    - 렌더러에서 누락값 대체 계산 금지
    output_format: result_report_schema
  P1-006:
    priority: P1
    objective: 새 전략 공식은 live 검증 전까지 주문 판단에 직접 반영하지 않는다.
    read_files:
    - spec/35_rule_lifecycle_governance_v3.yaml
    - Temp/continuous_evaluation_dashboard_v1.json
    - Temp/proposal_evaluation_history.json
    write_files:
    - spec/05_strategy/strategy_release_stage_policy.yaml
    - tools/validate_strategy_release_stage_v1.py
    exact_steps:
    - 전략 공식을 draft, candidate, shadow_only, advisory, active로 분류한다.
    - shadow_only 공식은 리포트에 참고값만 출력한다.
    - advisory 공식은 주문표에 직접 수량을 만들 수 없다.
    - active 공식만 final_execution_decision에 반영할 수 있다.
    - live T+20 30건 미만이면 active 금지.
    validation_commands:
    - python tools/validate_strategy_release_stage_v1.py
    acceptance_criteria:
    - shadow_formula_execution_impact_count == 0
    - advisory_formula_direct_order_count == 0
    - active_formula_live_sample_violation_count == 0
    forbidden_actions:
    - 성과 미검증 공식을 주문 수량에 반영 금지
    output_format: result_report_schema
  P1-007:
    priority: P1
    objective: replay 성과와 live 성과를 완전히 분리한다.
    read_files:
    - Temp/continuous_evaluation_dashboard_v1.json
    - Temp/proposal_evaluation_history.json
    - tools/build_continuous_evaluation_dashboard_v1.py
    write_files:
    - spec/37_evaluation_dashboard_contract.yaml
    - tools/validate_replay_live_separation_v1.py
    exact_steps:
    - replay_record_count와 live_evaluated_t20을 별도 필드로 유지한다.
    - replay 성과는 informational로만 표시한다.
    - live_evaluated_t20 < 30이면 expectancy, win_rate, max_drawdown은 null이어야 한다.
    - 리포트가 replay 성과를 실전 성과처럼 표현하면 FAIL 처리한다.
    validation_commands:
    - python tools/validate_replay_live_separation_v1.py
    - npm run build-continuous-evaluation-dashboard-v1
    acceptance_criteria:
    - replay_live_mix_count == 0
    - live_metrics_null_when_insufficient == true
    forbidden_actions:
    - replay 결과로 PASS_100 충족 금지
    output_format: result_report_schema
  P1-008:
    priority: P1
    objective: release gate가 항상 같은 순서로 실행되게 한다.
    read_files:
    - package.json
    - spec/22_pipeline_runtime_contract.yaml
    - spec/23_low_capability_llm_pipeline_todo.yaml
    write_files:
    - spec/00_governance/release_gate_sequence.yaml
    - tools/validate_release_gate_sequence_v1.py
    exact_steps:
    - package.json의 release 관련 scripts를 읽는다.
    - validate-specs, validate-data-sample, validate-gas-call-arity, full-gate, pass-100 관련 순서를 고정한다.
    - --skip-validate가 기본 경로에 있으면 FAIL 처리한다.
    - release, quick, package-only 모드별 필수 검증 차이를 명시한다.
    validation_commands:
    - python tools/validate_release_gate_sequence_v1.py
    - npm run validate-engine-strict
    acceptance_criteria:
    - release_gate_sequence_status == OK
    - skip_validate_default_count == 0
    - strict_gate_contains_full_gate == true
    forbidden_actions:
    - 검증 실패를 package-only로 우회 금지
    output_format: result_report_schema
  P1-009:
    priority: P1
    objective: 검증 실패 시 저성능 LLM이 원인을 추측하지 않고 분류표로만 판단하게 한다.
    read_files:
    - Temp/engine_harness_gate_result.json
    - Temp/pass_100_criteria_v3.json
    - Temp/algorithm_guidance_proof_v1.json
    write_files:
    - tools/build_failure_triage_v1.py
    - Temp/failure_triage_v1.json
    exact_steps:
    - failed_checks를 읽는다.
    - 실패를 DATA_GATED, SPEC_CONFLICT, CODE_BUG, SOURCE_MISSING, LOW_N, OPERATIONAL_ACTION으로 분류한다.
    - 각 실패에 owner와 next_todo를 붙인다.
    - LLM은 실패 원인을 새로 쓰지 않고 triage 결과만 출력한다.
    validation_commands:
    - python tools/build_failure_triage_v1.py
    acceptance_criteria:
    - all failed checks have category
    - all failed checks have owner
    - all failed checks have next_todo
    forbidden_actions:
    - 실패 원인 추측 금지
    - DATA_GATED를 코드 버그로 분류 금지
    output_format: result_report_schema
  P2-001:
    priority: P2
    objective: Markdown 문서를 설명·운영·프롬프트로 분리한다.
    read_files:
    - README.md
    - AGENTS.md
    - prompts/*.md
    - Temp/*.md
    write_files:
    - docs/doctrine.md
    - docs/runbook.md
    - docs/adr/
    - prompts/report_renderer_prompt.md
    - prompts/capture_parse_prompt.md
    - prompts/engine_audit_prompt.md
    exact_steps:
    - 투자 원칙은 docs/doctrine.md로 이동 후보 작성.
    - 실행 절차는 docs/runbook.md로 이동 후보 작성.
    - 아키텍처 결정은 docs/adr/ADR-*.md로 작성.
    - 프롬프트는 3개로 축소 후보 작성.
    - 기존 문서는 삭제하지 않고 deprecated 후보로 표시.
    validation_commands:
    - python tools/validate_specs.py
    - python tools/validate_prompt_formula_leak_v1.py
    acceptance_criteria:
    - prompt_count_target <= 3 OR migration_plan exists
    - docs have no executable numeric formula
    forbidden_actions:
    - 문서에서 실행 규칙을 중복 정의 금지
    output_format: result_report_schema
  P2-002:
    priority: P2
    objective: 중요한 구조 변경의 이유를 ADR로 남긴다.
    read_files:
    - spec/34_architecture_boundaries.yaml
    - spec/32_canonical_artifact_resolver.yaml
    write_files:
    - docs/adr/ADR-0001-single-source-of-truth.md
    - docs/adr/ADR-0002-gas-thin-adapter.md
    - docs/adr/ADR-0003-no-llm-numeric-generation.md
    - docs/adr/ADR-0004-shadow-before-active.md
    exact_steps:
    - 각 ADR에 Context, Decision, Consequence, Rollback을 작성한다.
    - 수익률 보장 문구는 쓰지 않는다.
    - 구조적 이유와 검증 조건만 쓴다.
    validation_commands:
    - python tools/validate_specs.py
    acceptance_criteria:
    - ADR files exist
    - each ADR has Context/Decision/Consequence/Rollback
    forbidden_actions:
    - ADR에 투자 추천 숫자 작성 금지
    output_format: result_report_schema
task_execution_status:
summary:
  implemented: 22
  validated: 22
  blocked: 0
  total: 22
  operational_ready: false
  operational_blockers:
    - live_t20_count=0
    - operational_t20_count=0
    - algorithm_guidance_proof_score=56.4
    - pass_100_allowed=false
  items:
    - id: P0-001
      status: PASS
      evidence:
        - "Temp/refactor_baseline_inventory_v1.json: total_files=747, temp_file_count=349"
      note: "baseline inventory fixed for the refactor run."
    - id: P0-002
      status: PASS
      evidence:
        - "docs/proposed_AGENTS_constitution_v1.md exists"
        - "docs/agents_rule_extraction_map_v1.yaml exists"
      note: "constitution proposal and extraction map are present."
    - id: P0-003
      status: PASS
      evidence:
        - "artifacts/canonical_manifest.yaml exists"
        - "python tools/validate_canonical_artifact_resolver_v1.py: PASS"
      note: "canonical manifest and canonical copies are in place."
    - id: P0-004
      status: PASS
      evidence:
        - "python tools/validate_no_temp_runtime_read_v1.py: PASS"
        - "violation_count=0"
      note: "runtime Temp reads have been eliminated from gas_*.gs."
    - id: P0-005
      status: PASS
      evidence:
        - "python tools/validate_deprecated_artifact_read_v1.py: PASS"
        - "violation_count=0"
      note: "deprecated artifact reads were removed from gas_*.gs."
    - id: P0-006
      status: PASS
      evidence:
        - "Temp/formula_owner_coverage_v1.json: formula_count=149, output_field_coverage_pct=97.32"
        - "spec/03_formulas/formula_registry.normalized.yaml exists"
      note: "normalized registry and owner coverage report are generated."
    - id: P0-007
      status: PASS
      evidence:
        - "Temp/output_field_owner_collision_v1.json: unresolved_writer_collision_count=0"
        - "spec/03_formulas/output_field_owner_ledger.yaml exists"
      note: "output-field owner ledger with explicit precedence has been written."
    - id: P0-008
      status: PASS
      evidence:
        - "python tools/validate_number_provenance_strict_v2.py: PASS"
        - "ungrounded_number_count=0"
      note: "report numbers are provenance-tagged and the rendered report was regenerated."
    - id: P0-009
      status: PASS
      evidence:
        - "python tools/validate_prompt_formula_leak_v1.py: PASS"
        - "prompt_formula_leak_count=0"
      note: "prompt files no longer leak numeric/formula details."
    - id: P0-010
      status: PASS
      evidence:
        - "Temp/gas_business_logic_audit_v1.json exists"
        - "python tools/validate_gas_thin_adapter_v1.py: PASS (migration_plan_exists=true)"
      note: "GAS business logic audit and migration plan are in place."
    - id: P0-011
      status: PASS
      evidence:
        - "spec/39_gas_thin_adapter_policy.yaml exists"
        - "python tools/validate_gas_thin_adapter_v1.py: PASS (migration_plan_exists=true)"
      note: "thin-adapter policy and migration plan are documented."
    - id: P1-001
      status: PASS
      evidence:
        - "tools/compile_formula_registry_v1.py exists"
        - "Temp/formula_compile_report_v1.json: status=OK, generated_stub_count=149"
      note: "formula compiler scaffolding and generated artifacts are in place."
    - id: P1-002
      status: PASS
      evidence:
        - "Temp/rule_lifecycle_policy.json exists"
        - "python tools/validate_rule_lifecycle_policy.py: PASS"
        - "python tools/validate_rule_lifecycle_strict_v1.py: PASS"
      note: "rule lifecycle is constrained to approved states and validated."
    - id: P1-003
      status: PASS
      evidence:
        - "python tools/validate_low_n_pass_gate_v1.py: PASS"
      note: "low-N PASS gate is now explicitly blocked."
    - id: P1-004
      status: PASS
      evidence:
        - "Temp/final_context_for_llm_v1_validation.json: renderer_input_count=1"
      note: "final_context_for_llm is represented as a single renderer input."
    - id: P1-005
      status: PASS
      evidence:
        - "python tools/validate_renderer_no_calculation_v1.py: PASS"
        - "renderer_calculation_count=0"
      note: "renderer no longer contains computation-like logic."
    - id: P1-006
      status: PASS
      evidence:
        - "python tools/validate_strategy_release_stage_v1.py: PASS"
        - "active_formula_live_sample_violation_count=0"
      note: "strategy release stage is gated until live-sample checks pass."
    - id: P1-007
      status: PASS
      evidence:
        - "Temp/replay_live_separation_v1.json: replay_live_mix_count=0"
        - "Temp/replay_live_separation_v1.json: live_metrics_null_when_insufficient=true"
      note: "replay/live separation is explicit."
    - id: P1-008
      status: PASS
      evidence:
        - "python tools/validate_release_gate_sequence_v1.py: PASS"
      note: "release gate order is explicit and stable."
    - id: P1-009
      status: PASS
      evidence:
        - "Temp/failure_triage_v1.json: triage_count=0"
      note: "failure triage artifact exists and is wired."
    - id: P2-001
      status: PASS
      evidence:
        - "docs/doctrine.md exists"
        - "docs/runbook.md exists"
        - "prompts/report_renderer_prompt.md exists"
        - "prompts/engine_audit_prompt.md exists"
      note: "docs/prompt separation has been created."
    - id: P2-002
      status: PASS
      evidence:
        - "docs/adr/ADR-0001-single-source-of-truth.md exists"
        - "docs/adr/ADR-0002-gas-thin-adapter.md exists"
        - "docs/adr/ADR-0003-no-llm-numeric-generation.md exists"
        - "docs/adr/ADR-0004-shadow-before-active.md exists"
      note: "core structure-change reasons are recorded as ADRs."

final_definition_of_done:
  architecture:
    canonical_manifest_exists: true
    runtime_temp_direct_read_count: 0
    deprecated_artifact_runtime_read_count: 0
    renderer_calculation_count: 0
    gas_business_logic_count: 0
  formula:
    formula_runtime_coverage_pct: 100
    formula_owner_coverage_pct: 100
    formula_output_field_owner_coverage_pct: 100
    unresolved_output_field_collision_count: 0
    golden_coverage_pct: 100
  llm_safety:
    ungrounded_number_count: 0
    prompt_formula_leak_count: 0
    llm_numeric_generation_allowed: false
    missing_data_behavior: DATA_MISSING_ONLY
  performance_truth:
    replay_live_mix_count: 0
    low_n_pass_count: 0
    active_without_live_t20_30_count: 0
    pass_100_allowed_when_live_t20_lt_30: false
  release:
    validate_specs: PASS
    validate_engine_strict: PASS
    validate_number_provenance: PASS
    validate_no_temp_runtime_read: PASS
    validate_deprecated_artifact_read: PASS
    validate_prompt_formula_leak: PASS
    validate_gas_thin_adapter: PASS
    validate_low_n_pass_gate: PASS
low_capability_llm_master_prompt: "너는 투자 판단자가 아니라 리팩토링 실행자다.\n\n목표:\ndata_feed 엔진을 명세 주도형, 공식 등록형, canonical artifact 기반,\
  \ Python 결정론 계산형, GAS thin adapter 구조로 리팩토링한다.\n\n절대 규칙:\n1. 가격·수량·비율·점수를 새로 만들지 않는다.\n2. spec/13_formula_registry.yaml에\
  \ 없는 공식명을 만들지 않는다.\n3. Temp의 다중 버전 파일을 runtime source로 직접 사용하지 않는다.\n4. canonical_manifest에 지정된 파일만 runtime source로 인정한다.\n\
  5. replay 성과를 live 성과로 말하지 않는다.\n6. live T+20 표본 30건 미만이면 active 또는 PASS_100으로 승격하지 않는다.\n7. 검증 실패를 설명으로 우회하지 않는다.\n8. 파일이\
  \ 없으면 DATA_MISSING으로 표시한다.\n9. 작업은 TODO 카드의 read_files, write_files, exact_steps, validation_commands, acceptance_criteria만\
  \ 따른다.\n10. 각 TODO 완료 후 result YAML만 출력한다.\n\n수행 순서:\nmaster_execution_order에 있는 순서대로 하나씩 수행한다.\n\n각 작업 완료 보고 형식:\nresult:\n\
  \  todo_id:\n  status: PASS | FAIL | BLOCKED\n  files_changed:\n  validation_result:\n  failed_reason:\n  next_required_todo:\n\
  \n금지:\n- 임의 공식 추가\n- 임의 수치 보정\n- 하네스 FAIL 우회\n- deprecated artifact 사용\n- GAS에 신규 투자 판단 로직 추가\n- prompt에 가격·수량·임계값 계산 지시\
  \ 추가"
