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에 가격·수량·임계값 계산 지시\ \ 추가"