schema_version: quant_engine_refactor_master_plan.v1 plan_id: QER-MASTER-REFACTOR-2026-06-07 language: ko-KR created_at_kst: '2026-06-07T02:30:00+09:00' scope: allowed_file_types: - .md - .yaml - .gs - .py - .json - .schema.json - .jsonl user_requested_primary_artifact: downloadable_yaml investment_domain: retirement_asset_quant_engine objective: 5억원 목표 자산 형성을 위한 주간 단위 투자 엔진을 흔들림 없이 확장/고도화/검증/렌더링하는 구조로 재정렬 non_goals: - LLM이 가격·수량·TP·SL·점수를 임의 생성하는 구조 - GAS에 투자판단·사이징·위험점수 로직을 남기는 구조 - 문서 수 증가로 문제를 덮는 방식 - 검증 실패를 운영 판단으로 우회하는 방식 source_evidence: source_zip: /mnt/data/data_feed.zip source_zip_sha256: f5ce3c4c7f5b0f778a6bbcc967b0e764f2032efa809a3442e10d7c5a752b9095 read_authority_files: - AGENTS.md - runtime/active_artifact_manifest.yaml - governance/agents_index.yaml - governance/rules/*.yaml - spec/*.yaml - package.json - Temp/final_decision_packet_v4.json - Temp/engine_harness_gate_result.json - Temp/harness_coverage_audit.json - Temp/repo_hygiene_report.json observed_repository_metrics: total_file_count: 1691 extension_counts: .gs: 7 .js: 1 .json: 728 .jsonl: 2 .log: 1 .md: 42 .ps1: 4 .py: 749 .txt: 6 .yaml: 152 top_directory_file_counts: Temp: 401 src: 303 tools: 298 schemas: 160 tests: 159 runtime: 154 spec: 113 artifacts: 35 governance: 24 .: 13 prompts: 9 docs: 8 examples: 8 suggest: 5 dist: 2 package_script_count: 190 version_duplicate_group_count_detected: 109 analysis_generated_files_excluded: true notable_duplicate_groups: - Temp/smart_cash_recovery_v3..v9 - Temp/final_decision_packet_v1..v4 - Temp/final_execution_decision_v1..v4 - Temp/data_integrity_100_lock_v1..v5 - tools/build_smart_cash_recovery_v3..v6 - spec/formula_golden_cases_v2..v4 observed_engine_metrics: engine_harness_gate_status: OK failed_checks_count: 0 formula_total: 292 effective_formula_coverage_pct: 100.0 gas_only_coverage_pct: 58.56 python_coverage_pct: 41.44 true_missing_formula_count: 0 output_field_coverage_pct: 100.0 formula_owner_coverage_pct: 0.0 unresolved_writer_collision_count: 0 resolved_collision_count: 13 prediction_match_rate_pct: 54.76 golden_test_coverage_ratio: 0.6086 packet_ungrounded_number_count: 0 llm_numeric_generation_allowed: 0 pass_100_gate: BLOCK_EXECUTION pass_100_score_0_100: 50.0 execution_readiness_gate: BLOCK_EXECUTION execution_readiness_min_axis_score: 37.2 cold_assessment: current_state_grade: B+ for governance direction, C+ for operational maintainability, B for numerical discipline, C for file entropy control core_diagnosis: - id: D01 finding: AGENTS.md는 final_decision_packet_v3를 읽으라고 하지만 active_artifact_manifest.yaml은 canonical_source를 final_decision_packet_v2로 둔다. 동시에 v4 패킷도 존재한다. risk: 저성능 LLM·운영자·스크립트가 서로 다른 패킷을 읽어 판단 드리프트가 발생할 수 있다. required_fix: runtime/active_artifact_manifest.yaml 한 곳만 최종 권위로 두고 AGENTS.md 읽기 순서는 manifest alias로만 연결한다. severity: P0 - id: D02 finding: 공식 커버리지는 effective 100%지만 GAS-only 58.56%, Python 41.44%로 분산되어 있다. risk: GAS와 Python의 책임 경계가 조금만 흐려져도 같은 공식이 서로 다른 구현으로 갈라진다. required_fix: Python canonical implementation을 active로, GAS는 collect/normalize/export/display thin adapter로 고정한다. severity: P0 - id: D03 finding: formula_owner_coverage_pct가 0.0으로 관측된다. output field coverage는 100%이나 공식 owner/status 소유권이 비어 있다. risk: 새 공식 도입·수정·폐기 시 책임자가 없어 하네스가 통과해도 방법론이 파편화된다. required_fix: spec/ownership_map.yaml 또는 governance/authority_matrix.yaml에 formula_owner, status_owner, reviewer를 필수화한다. severity: P0 - id: D04 finding: Temp와 tools에 버전 산출물이 과밀하다. 전체 파일 1692개 중 Temp 401개, tools 298개, version duplicate group 109개가 관측된다. risk: 최신 파일을 잘못 고르는 사람이 실수하고, 저성능 LLM은 오래된 v 파일을 근거로 답할 가능성이 커진다. required_fix: active/canonical/archive 세 구역으로 수명주기를 강제하고, runtime은 manifest에 등재된 파일만 읽는다. severity: P0 - id: D05 finding: prediction_match_rate_pct 54.76, golden_test_coverage_ratio 0.6086, PASS_100 BLOCK_EXECUTION 상태로 관측된다. risk: 실행 판단을 공격적으로 자동화하기에는 아직 예측력·검증력·실행 준비도 근거가 부족하다. required_fix: 신규 팩터는 반드시 shadow -> evidence -> active 승격을 거치고, live/replay/backtest를 혼합하지 않는다. severity: P1 decision: 문서를 더 만들지 말고, 권위 파일을 줄이고, 공식·데이터·렌더링·GAS의 경계를 강제하는 release-DAG 중심 개발법으로 전환한다. target_architecture: name: Canonical Contract Driven Quant Engine one_sentence: spec가 계약을 정의하고, Python이 숫자를 계산하고, GAS는 데이터를 모으고, Temp는 산출물만 담고, LLM은 packet을 읽어 설명만 한다. layers: - layer: L0_objective_policy directory: spec/01_objective_profile.yaml, spec/risk/*.yaml owns: - 목표금액 - 현금 방어선 - D+2 현금 인정 - 주간 리밸런싱 - 1/11/21 중간점검 - 위험예산 must_not_own: - 개별 종목 최신 가격 산출 - layer: L1_data_contract directory: spec/02_data_contract.yaml, spec/12_field_dictionary.yaml, spec/14_raw_workbook_mapping.yaml, schemas/*.schema.json owns: - 필드명 - 타입 - 단위 - freshness SLA - provenance - 결측 정책 must_not_own: - 투자판단 - layer: L2_formula_registry directory: spec/13_formula_registry.yaml, spec/formulas/*.yaml owns: - 공식 ID - 입력 필드 - 출력 필드 - 공식 버전 - 허용 범위 - golden cases - owner must_not_own: - 실행 렌더 문구 - layer: L3_python_canonical_engine directory: src/quant_engine, runtime/python/core/formulas/generated owns: - 수치 계산 - 게이트 판정 - 사이징 - 손절·익절 - 팩터 스코어 - risk budget cascade must_not_own: - 사용자에게 보여줄 장문 보고서 문장 - layer: L4_tools_cli directory: tools/*.py owns: - build - validate - render - package - audit - migration must_not_own: - 핵심 투자 알고리즘 로직 - layer: L5_gas_adapter directory: gas_*.gs owns: - collect - normalize - export - display must_not_own: - decision - sizing - stop_loss - take_profit - risk_score - layer: L6_runtime_artifacts directory: Temp/, runtime/active_artifact_manifest.yaml, artifacts/canonical owns: - 실행 산출물 - active artifact - shadow ledger - lineage must_not_own: - 소스 규칙 - layer: L7_llm_packet_renderer directory: prompts/low_capability_report_renderer.md, spec/46_low_capability_execution_pack.yaml owns: - 숫자 재계산 없는 설명 - 액션 테이블 표시 - DATA_MISSING 표시 must_not_own: - 하네스 판정 번복 - 가격/수량 창작 allowed_dependency_direction: L0 -> L1 -> L2 -> L3 -> L4 -> L5/L6 -> L7 only forbidden_dependency_direction: - report -> formula - GAS -> decision logic - LLM -> numeric generation - Temp artifact -> spec authority - deprecated artifact -> active runtime development_methodology: method_name: Spec First + Harness First + Shadow Promotion + Manifest Only Runtime operating_principles: - principle: single_source_of_truth rule: 모든 운영 숫자는 runtime/active_artifact_manifest.yaml이 가리키는 active artifact에서만 읽는다. test: validate_active_manifest_consistency must PASS - principle: no_llm_numeric_generation rule: LLM은 가격·수량·TP·SL·점수·비중을 계산하지 않는다. packet 숫자를 설명하고 누락 시 DATA_MISSING만 출력한다. test: validate_number_provenance_v1 and low_capability_response_contract must PASS - principle: contract_before_code rule: 새 팩터/게이트/리포트 필드는 spec -> schema -> golden case -> owner ledger -> Python -> GAS adapter 순으로만 추가한다. test: validate_specs, validate_schema_model_generation, validate_golden_coverage_100 must PASS - principle: shadow_before_active rule: 신규 공식은 shadow로 최소 live T+20 30건 또는 지정 표본을 채운 뒤 active 승격한다. test: rule_lifecycle transition requires change_request and evidence ledger - principle: live_replay_separation rule: live, paper, backtest, replay 성과는 서로 다른 source_type으로 저장하며 live 성과처럼 혼합 표시하지 않는다. test: validate_live_replay_separation must PASS - principle: delete_or_archive_over_document rule: 문서 추가보다 중복 제거, manifest 연결, 오래된 버전 archive 이동을 우선한다. test: audit_repository_entropy thresholds must PASS algorithm_design_standard: factor_pipeline_order: - data_quality_gate - market_regime_gate - portfolio_risk_budget_gate - per_ticker_factor_scores - horizon_router - entry_exit_gate - sizing - order_blueprint - shadow_ledger - packet_renderer minimum_factor_contract: required_fields: - factor_id - hypothesis - horizon - decay_half_life - market_regime_applicability - input_fields - formula_id - expected_edge_formula - data_quality_requirements - conflict_precedence - position_sizing_impact - exit_impact - golden_cases - shadow_start_date - activation_threshold - retirement_condition - owner - reviewer - source_type_allowed forbidden_fields: - free_text_score_without_formula - manual_price_override_without_provenance - llm_estimated_quantity score_normalization_standard: score_range: 0..100 confidence_cap: min(data_quality_score, evidence_score, calibration_score) negative_evidence_policy: risk/exit gates dominate bullish factor scores conflict_resolution_order: - hard_block - risk_budget - data_quality - exit_signal - cash_floor - expected_edge - momentum - fundamental - narrative anti_late_entry_standard: purpose: 뒷북 매수와 설거지 매수를 구조적으로 차단 required_signals: - entry_timing_decile - pullback_quality - volume_price_confirmation - distribution_risk - relative_strength_persistence - freshness_of_breakout hard_blocks: - price_extended_without_pullback - distribution_risk_high - no_liquidity_confirmation - event_gap_after_chase - stale_signal activation_rule: shadow에서 late_entry_false_positive_rate가 기존 active 대비 20% 이상 개선되고, opportunity_loss가 허용범위 내일 때만 active 승격 risk_budget_standard: goal: 수익률을 올리되 수익금을 지키는 엔진 rules: - cash_floor is hard constraint - D+2 cash counts as immediate cash defense - single_name_cap and cluster_cap are hard constraints - profit_lock_ratchet is mandatory after defined gain threshold - drawdown_guard overrides buy signals outputs: - position_scale - cash_raise_plan - sell_priority_table - risk_budget_cascade - expected_damage_if_hold - expected_damage_if_sell refactor_phases: - phase_id: P0 name: 권위 충돌 제거와 런타임 단일화 timebox: 1 release cycle entry_criteria: - current zip extracted - AGENTS.md read - runtime/active_artifact_manifest.yaml exists exit_criteria: - active_manifest_canonical_source matches AGENTS read order - only one active final_decision_packet alias - deprecated final_decision_packet files moved to artifacts/archive or marked inactive - validate_active_manifest_consistency PASS tasks: - T001 - T002 - T003 - T004 - T005 - T006 - phase_id: P1 name: 공식 소유권과 수명주기 강화 timebox: 1-2 release cycles entry_criteria: - P0 complete exit_criteria: - formula_owner_coverage_pct == 100.0 - status_owner_coverage_pct == 100.0 - every formula has lifecycle state - changed formula requires change_request tasks: - T010 - T011 - T012 - T013 - T014 - T015 - phase_id: P2 name: GAS thin adapter 전환 timebox: 2-4 release cycles entry_criteria: - forbidden GAS business logic inventory exists exit_criteria: - forbidden_gas_logic_count == 0 or approved exceptions only - GAS exports inputs and displays outputs only - Python/GAS golden parity PASS tasks: - T020 - T021 - T022 - T023 - T024 - T025 - phase_id: P3 name: 저성능 LLM 실행 패킷 고정 timebox: 1 release cycle entry_criteria: - final_decision_packet schema stable exit_criteria: - low_capability_response_contract PASS - all report numbers have provenance - renderer_calculation_count == 0 tasks: - T030 - T031 - T032 - T033 - T034 - phase_id: P4 name: 팩터 연구·백테스트·라이브 승격 체계 timebox: continuous entry_criteria: - factor taxonomy active exit_criteria: - new factor cannot become active without live/paper/backtest separation and shadow ledger - prediction lift dashboard produced weekly tasks: - T040 - T041 - T042 - T043 - T044 - T045 - T046 - phase_id: P5 name: 문서/파일 다이어트와 릴리즈 DAG 압축 timebox: 2 release cycles entry_criteria: - entropy audit baseline captured exit_criteria: - package_script_count reduced or grouped - version_duplicate_groups under threshold - Temp active files manifest-only - docs under size budget tasks: - T050 - T051 - T052 - T053 - T054 - T055 atomic_todo: - id: T001 priority: P0 title: active packet alias 확정 instruction: runtime/active_artifact_manifest.yaml에 final_decision_packet_active alias를 추가하고, 값은 현재 운영에서 읽을 단 하나의 파일만 가리키게 한다. AGENTS.md의 직접 파일명은 alias 참조로 바꾼다. files_to_touch: - runtime/active_artifact_manifest.yaml - AGENTS.md - governance/agents_index.yaml acceptance: - AGENTS.md에 final_decision_packet_v2/v3/v4 직접 하드코딩이 없다 - manifest active_count_per_formula remains 1 - report_authority_diff_count == 0 validation_commands: - python tools/validate_specs.py - python tools/validate_active_artifact_manifest_v1.py || python tools/build_canonical_artifact_resolver_v1.py - id: T002 priority: P0 title: final_decision_packet 버전 수명 정리 instruction: Temp/final_decision_packet_v1..v4 중 active alias가 아닌 파일은 artifacts/archive/YYYY-MM-DD로 이동하거나 superseded_by를 명시한다. Temp에는 active 산출물과 최신 validation 결과만 둔다. files_to_touch: - Temp/final_decision_packet_*.json - artifacts/archive/ - runtime/lineage_events.jsonl acceptance: - Temp final_decision_packet active file count == 1 - archive manifest records moved files - lineage event exists for each moved artifact validation_commands: - python tools/audit_repository_entropy_v1.py --root . --out Temp/repo_entropy_after_p0.yaml - id: T003 priority: P0 title: 운영 리포트와 packet 점수 동기화 검사 추가 instruction: operational_report.json의 PASS_100, execution_readiness, prediction fields가 final_decision_packet_active와 동일한지 비교하는 validator를 만든다. 불일치 시 FAIL_BLOCK_PUBLISH. files_to_touch: - tools/validate_report_packet_sync_v1.py - package.json - schemas/operational_report.schema.json acceptance: - PASS_100 score/gate mismatch 발견 시 exit_code != 0 - full-gate에 validator 포함 - renderer는 packet 값을 그대로 표시 validation_commands: - python tools/validate_report_packet_sync_v1.py --packet Temp/final_decision_packet_active.json --report Temp/operational_report.json - id: T004 priority: P0 title: 숫자 provenance 차단 강화 instruction: 보고서 모든 숫자에 source_path, json_pointer, formula_id, input_hash, freshness_status가 없으면 렌더 차단한다. files_to_touch: - spec/45_number_provenance_contract.yaml - tools/validate_number_provenance_v1.py - prompts/low_capability_report_renderer.md acceptance: - ungrounded_number_count == 0 - LLM numeric_generation_allowed == 0 - DATA_MISSING 처리 케이스 golden test 존재 validation_commands: - npm run validate-llm-freedom - python tools/validate_number_provenance_v1.py - id: T005 priority: P0 title: release DAG 단일 진입점 정리 instruction: package.json 190개 스크립트 중 운영자가 직접 실행할 entrypoint를 release-gate, full-gate, quick-gate, package-only, daily-feedback-report로 제한하고 나머지는 내부 stage로 분류한다. files_to_touch: - package.json - spec/41_release_dag.yaml - tools/run_release_dag_v1.py - README.md acceptance: - README 운영 명령이 5개 이하 - run_release_dag_v1.py가 stage orchestration 담당 - 중복 npm chain 제거 또는 internal namespace 이동 validation_commands: - npm run full-gate - npm run release-gate - id: T006 priority: P0 title: DATA_MISSING 표준화 instruction: 하네스 결측은 어떤 보고서에서도 추정값으로 채우지 말고 DATA_MISSING — 하네스 업데이트 필요 형식으로만 렌더한다. files_to_touch: - spec/46_low_capability_execution_pack.yaml - schemas/low_capability_response_contract_v3.schema.json - prompts/low_capability_report_renderer.md - tests/golden/*missing* acceptance: - 결측 golden case에서 임의 수치 0건 - DATA_MISSING phrase exactly appears - blocked metrics still visible in shadow ledger validation_commands: - python tools/validate_low_capability_response_contract_v3.py || npm run validate-report-quality - id: T010 priority: P0 title: 공식 owner/status 필수화 instruction: spec/13_formula_registry.yaml의 모든 formula_id에 owner, reviewer, lifecycle_state, status_owner, output_owner를 요구한다. 누락 시 validate_specs 실패. files_to_touch: - spec/13_formula_registry.yaml - spec/ownership_map.yaml - governance/authority_matrix.yaml - tools/validate_formula_owner_coverage_v1.py acceptance: - formula_owner_coverage_pct == 100.0 - missing_owner_list length == 0 - missing_status_list length == 0 validation_commands: - python tools/validate_formula_owner_coverage_v1.py - python tools/validate_specs.py - id: T011 priority: P0 title: change_request 없는 공식 변경 금지 instruction: formula registry, risk policy, decision flow 변경은 governance/change_requests/*.yaml에 근거가 없으면 차단한다. files_to_touch: - governance/change_request_template.yaml - governance/rule_lifecycle.yaml - tools/validate_change_request_coverage_v1.py acceptance: - changed_formula_without_change_request_count == 0 - change_request has before/after/expected_effect/rollback_plan/evidence_required validation_commands: - python tools/validate_change_request_coverage_v1.py - id: T012 priority: P1 title: golden case coverage 100 하드게이트 instruction: 공식별 최소 buy/sell/hold/reject/insufficient_data/edge_case golden case를 강제한다. 현재 coverage ratio 0.6086 수준은 active 승격 기준으로 부족하다. files_to_touch: - spec/formula_golden_cases_v4.yaml - tests/golden/ - tools/validate_golden_coverage_100.py acceptance: - golden_test_coverage_ratio == 1.0 - decision-critical formulas have 5 scenario classes - edge cases include stale data and missing provenance validation_commands: - python tools/validate_golden_coverage_100.py - python tools/run_formula_golden_cases_v2.py - id: T013 priority: P1 title: 공식 충돌 해결 테이블 고정 instruction: output_field_owner_collision_v1에서 resolved collision 13건은 예외가 아니라 명시적 precedence table로 유지한다. 새 충돌은 실패 처리한다. files_to_touch: - spec/execution_authority_matrix_v2.yaml - spec/xref_matrix.yaml - tools/validate_output_field_owner_collision_v1.py acceptance: - unresolved_writer_collision_count == 0 - resolved collisions have explicit precedence reason - new collision causes FAIL validation_commands: - python tools/validate_output_field_owner_collision_v1.py - id: T014 priority: P1 title: 공식 버전 deprecation policy instruction: _vN 파일은 active, shadow, archived, retired 중 하나의 상태를 가져야 한다. 같은 formula family에서 active는 1개만 허용한다. files_to_touch: - governance/rule_lifecycle.yaml - runtime/active_artifact_manifest.yaml - tools/validate_formula_version_lifecycle_v1.py acceptance: - active_count_per_formula == 1 - stale_artifact_count == 0 - version_duplicate_group_count under configured threshold validation_commands: - python tools/validate_formula_version_lifecycle_v1.py - python tools/audit_repository_entropy_v1.py --root . --out Temp/repo_entropy.yaml - id: T015 priority: P1 title: ADR와 spec 연결 강제 instruction: governance/adr/*.md는 반드시 변경한 spec 파일과 validation command를 참조해야 한다. 단순 의견 문서는 archive한다. files_to_touch: - governance/adr_index.yaml - governance/adr/*.md - tools/validate_adr_spec_links_v1.py acceptance: - ADR without touched_spec_count == 0 - ADR index hash updated - obsolete docs archived validation_commands: - python tools/validate_adr_spec_links_v1.py - id: T020 priority: P0 title: GAS business logic inventory 확정 instruction: gas_*.gs의 모든 함수에 allowed_responsibility 태그를 붙인다. decision/sizing/stop_loss/take_profit/risk_score는 forbidden으로 분류한다. files_to_touch: - tools/audit_gas_business_logic_v1.py - Temp/gas_business_logic_audit_v1.json - spec/39_gas_thin_adapter_policy.yaml acceptance: - function_inventory_coverage_pct == 100.0 - forbidden_function_count is measured - approved exceptions only runtime_report_rendering/data_collection_helpers validation_commands: - python tools/audit_gas_business_logic_v1.py --out Temp/gas_business_logic_audit_v1.json - id: T021 priority: P0 title: GAS 의사결정 로직 Python 이전 instruction: GAS에서 발견된 decision/sizing/stop/tp/risk 로직을 src/quant_engine/core 또는 runtime/python/core/formulas/generated로 이전하고 GAS는 해당 결과를 읽기만 한다. files_to_touch: - src/quant_engine/ - runtime/python/core/formulas/generated/ - gas_*.gs - tools/validate_gas_thin_adapter_v1.py acceptance: - forbidden_gas_logic_count decreases every release - Python/GAS parity golden cases PASS - GAS adapter has no hard-coded risk thresholds validation_commands: - python tools/validate_gas_thin_adapter_v1.py - node tools/run_gas_golden_parity.js - id: T022 priority: P1 title: GAS 함수 arity/contract 고정 instruction: GAS export 함수의 인자 수, 반환 shape, sheet key를 schema로 고정한다. files_to_touch: - schemas/generated/gas_adapter_contract.schema.json - tools/validate_gas_call_arity.py - gas_*.gs acceptance: - validate-gas-call-arity PASS - all exported rows have schema - no silent null returns validation_commands: - npm run validate-gas-call-arity - id: T023 priority: P1 title: 데이터 수집과 판단 시점 분리 instruction: collect timestamp, normalize timestamp, decision timestamp를 분리하고 freshness_status를 packet까지 전달한다. files_to_touch: - spec/02_data_contract.yaml - spec/45_number_provenance_contract.yaml - tools/build_data_freshness_sla_v1.py - gas_data_collect.gs acceptance: - every numeric field has freshness_status - stale TP removed - freshness SLA violations block active decision validation_commands: - python tools/build_data_freshness_sla_v1.py - python tools/validate_number_provenance_v1.py - id: T024 priority: P1 title: HTS/account snapshot 계약 강화 instruction: account_snapshot 필드, D+2 현금, 예수금, 평가금, 매수가능금액을 schema로 고정하고 파싱 결과와 하네스 입력을 reconciliation한다. files_to_touch: - spec/15_account_snapshot_contract.yaml - spec/14_raw_workbook_mapping.yaml - tools/validate_account_snapshot_contract_v1.py acceptance: - D+2 cash treated as immediate cash defense - snapshot_parse_error_count == 0 - cash defense line provenance exists validation_commands: - python tools/validate_account_snapshot_contract_v1.py - id: T025 priority: P2 title: GAS deployment checklist 자동화 instruction: Apps Script 반영 후 runHarnessRefresh_ 실행, proposal_reference_json 생성, strict gate 전환까지 체크리스트를 스크립트로 만든다. files_to_touch: - README.md - tools/validate_proposal_reference.py - tools/gas_deployment_checklist_v1.py acceptance: - proposal_reference strict PASS - operator checklist has exact commands - rollback step documented validation_commands: - npm run validate-proposal-reference:strict - npm run full-gate:proposal-strict - id: T030 priority: P0 title: packet-only renderer 구현 instruction: 보고서 렌더러는 final_decision_packet_active의 필드만 읽는다. 계산식, fallback 계산, 임의 보간을 제거한다. files_to_touch: - tools/render_operational_report_json.py - prompts/low_capability_report_renderer.md - spec/46_low_capability_execution_pack.yaml acceptance: - renderer_calculation_count == 0 - all sections map to packet json_pointer - missing data renders DATA_MISSING validation_commands: - python tools/validate_renderer_contract_v1.py - npm run validate-report-sync - id: T031 priority: P0 title: 저성능 LLM 응답 순서 고정 instruction: 응답은 executive -> blockers -> action_table -> shadow_ledger -> data_missing -> education_notes 순서만 허용한다. files_to_touch: - spec/46_low_capability_execution_pack.yaml - schemas/low_capability_response_contract_v3.schema.json - prompts/low_capability_report_renderer.md acceptance: - section order fixed - blocked items still display price/SL/TP/qty if available - unsupported reason count is explicit validation_commands: - python tools/validate_low_capability_response_contract_v3.py - id: T032 priority: P1 title: 문장-숫자 cross-check instruction: 마크다운 문장에 있는 숫자와 JSON packet 숫자가 다르면 publish 차단한다. files_to_touch: - tools/validate_report_numerical_sync_v1.py - schemas/operational_report.schema.json acceptance: - numeric_text_mismatch_count == 0 - percent/원/주 단위 normalization handled - stale extracted number fails test validation_commands: - python tools/validate_report_numerical_sync_v1.py --report Temp/operational_report.json --packet Temp/final_decision_packet_active.json - id: T033 priority: P1 title: LLM forbidden phrase and hallucination audit instruction: 보고서에 “예상”, “아마”, “대략”, “추정”처럼 하네스 없는 수치 완화 표현이 있는지 검사한다. files_to_touch: - tools/validate_llm_narrative_template_lock_v1.py - prompts/report_renderer_prompt.md acceptance: - hallucination_risk_phrase_count == 0 for action table - soft language allowed only education_notes - gate cannot be softened by narrative validation_commands: - npm run validate-narrative-lock - id: T034 priority: P2 title: 표준 한국어 액션 문법 instruction: BUY/SELL/TRIM/HOLD/AVOID는 하나의 주문문에 다중 조건 접속사를 넣지 않는다. 조건은 별도 행으로 분리한다. files_to_touch: - spec/03_order_grammar.yaml - schemas/order_blueprint_v2.schema.json - tools/validate_order_grammar_v1.py acceptance: - multi_condition_order_sentence_count == 0 - tick normalization PASS - sell candidate >=2 triggers sell priority table first validation_commands: - python tools/validate_order_grammar_v1.py - id: T040 priority: P1 title: 팩터 연구 RFC 템플릿 instruction: 새 팩터는 hypothesis, expected edge, decay half-life, source type, conflict precedence, golden cases가 없으면 등록 불가. files_to_touch: - spec/43_quant_factor_taxonomy.yaml - governance/change_request_template.yaml - suggest/factor_rfc_template.yaml acceptance: - new_factor_missing_contract_count == 0 - factor has owner and retirement condition - no factor enters active without shadow evidence validation_commands: - python tools/validate_factor_contract_v1.py - id: T041 priority: P1 title: 예측력 lift 측정 표준화 instruction: prediction_match_rate_pct만 보지 말고 baseline random, benchmark, sector neutral, transaction cost after slippage 대비 lift를 기록한다. files_to_touch: - spec/17_performance_contract.yaml - tools/build_prediction_lift_dashboard_v1.py - Temp/continuous_evaluation_dashboard_v*.json acceptance: - prediction_lift_vs_baseline_ppt exists - t5/t20/t60 horizon separated - sample_count and confidence interval included validation_commands: - python tools/build_prediction_lift_dashboard_v1.py - id: T042 priority: P1 title: late-entry anti-chase 하네스 강화 instruction: 신규 진입 추천이 추세 막차/분배 구간/이벤트 갭 이후인지 검증하는 false-positive ledger를 만든다. files_to_touch: - spec/strategy/anti_late_entry.yaml - tools/build_anti_late_chase_v6.py - tests/golden/anti_late_entry_cases.yaml acceptance: - late_entry_false_positive_rate tracked - chase_block_reason displayed - opportunity_loss tracked separately validation_commands: - python tools/build_anti_late_chase_v6.py - python tools/validate_alpha_execution_harness.py GatherTradingData.json --check anti_late_entry - id: T043 priority: P1 title: 스마트머니/유동성 composite 분해 instruction: smart_money_score와 liquidity_score를 거래대금, 수급 주체, 회전율, 가격충격, spread proxy로 분해하고 각자 provenance를 둔다. files_to_touch: - spec/formulas/smart_money_liquidity.yaml - tools/build_smart_money_liquidity_composite_v4.py acceptance: - component_scores sum or weighted formula documented - liquidity trap flag exists - thin liquidity blocks large orders validation_commands: - python tools/build_smart_money_liquidity_composite_v4.py - id: T044 priority: P2 title: 펀더멘털 quality raw evidence 분리 instruction: PER/PBR/ROE/영업이익증가율/현금흐름/부채비율 등 원천값과 정규화 점수를 분리한다. files_to_touch: - spec/strategy/fundamental_quality_v4.yaml - tools/build_fundamental_raw_evidence_v4.py - schemas/generated/fundamental_quality.schema.json acceptance: - raw fundamental value provenance exists - imputed data exposure displayed - fundamental stale data blocks long-horizon upgrade validation_commands: - python tools/build_fundamental_raw_evidence_v4.py - python tools/validate_imputed_data_exposure_v1.py - id: T045 priority: P2 title: exit waterfall engine 강화 instruction: 손절, 상대손절, 시간손절, 수익보호 ratchet, 분배 위험, 현금회복 필요를 하나의 precedence waterfall로 정렬한다. files_to_touch: - spec/exit/exit_waterfall.yaml - tools/build_sell_waterfall_engine_v3.py - tests/golden/sell_waterfall_cases.yaml acceptance: - exit reason precedence deterministic - sell priority table always before 2+ sell candidates - value_damage_if_hold/sell both shown validation_commands: - python tools/build_sell_waterfall_engine_v3.py - npm run validate-cash-raise-route - id: T046 priority: P2 title: 라이브/리플레이 승격 대시보드 instruction: replay EV, paper EV, live EV를 같은 표에 두되 source_type과 승격 가능 여부를 분리한다. files_to_touch: - spec/44_live_replay_separation.yaml - tools/build_performance_readiness_replay_bridge_v2.py acceptance: - live_t20_count displayed - replay cannot unlock active Kelly - 'promotion_rule enforced: live_t20_count >= 30' validation_commands: - python tools/build_performance_readiness_replay_bridge_v2.py - id: T050 priority: P0 title: Temp 파일 정책 적용 instruction: Temp는 빌드 산출물 전용이다. active runtime 파일, latest validation 파일, current report 외 오래된 json은 archive로 이동한다. files_to_touch: - spec/47_packaging_policy.yaml - tools/clean_temp_artifacts_v1.py - artifacts/archive/ acceptance: - Temp file count reduced under configured budget - archived files have manifest and hash - runtime consumers do not read archived paths validation_commands: - python tools/clean_temp_artifacts_v1.py --dry-run - python tools/audit_repository_entropy_v1.py --root . --out Temp/repo_entropy.yaml - id: T051 priority: P1 title: tools CLI 역할 분리 instruction: tools/*.py를 build_, validate_, render_, migrate_, audit_ prefix로 분류하고 핵심 공식 로직은 src/quant_engine으로 이전한다. files_to_touch: - tools/ - src/quant_engine/ - spec/34_architecture_boundaries.yaml acceptance: - tools_core_logic_count == 0 - all tools have argparse help - all tools return machine-readable status validation_commands: - python tools/validate_architecture_boundaries_v2.py - id: T052 priority: P1 title: 문서 다이어트 instruction: README는 운영 entrypoint만, AGENTS는 헌법/읽기 순서만, 상세 규칙은 governance/rules와 spec으로 이동한다. prompt 장문은 dist compact pack으로 압축한다. files_to_touch: - README.md - AGENTS.md - prompts/*.md - docs/*.md - dist/*.yaml acceptance: - AGENTS.md under configured line budget - README commands <= 5 - prompt/spec drift validator PASS validation_commands: - python tools/validate_agents_shrink_v1.py - python tools/validate_prompt_spec_sync_v1.py - id: T053 priority: P1 title: package whitelist 정리 instruction: prepare_upload_zip는 source_required, runtime_required, report_required, test_required만 포함하고 archive/temp noise를 제외한다. files_to_touch: - tools/prepare_upload_zip.py - spec/47_packaging_policy.yaml acceptance: - zip contains no deprecated artifacts unless archive profile - release zip reproducible hash stable - package profile recorded validation_commands: - npm run prepare-upload-zip:release - npm run prepare-upload-zip:quick - id: T054 priority: P2 title: 자동 엔트로피 예산 instruction: 파일 수, 중복 버전 그룹, scripts 수, Temp 파일 수, 문서 라인 수에 release budget을 둔다. 초과 시 package 차단. files_to_touch: - tools/audit_repository_entropy_v2.py - spec/release/repository_entropy_budget.yaml - package.json acceptance: - repository_entropy_gate == PASS - new docs require retirement of old docs or ADR justification - script count budget enforced validation_commands: - python tools/audit_repository_entropy_v2.py --root . --out Temp/repo_entropy_v2.json - id: T055 priority: P2 title: compact/ultra compact bundle 동등성 instruction: dist compact yaml과 full source가 같은 decision packet을 만들어내는지 equivalence test를 둔다. files_to_touch: - dist/*.yaml - tools/validate_compact_bundle_equivalence_v1.py acceptance: - compact_bundle_equivalence == PASS - low capability pack contains all required sections - missing source link count == 0 validation_commands: - python tools/validate_compact_bundle_equivalence_v1.py low_capability_llm_execution_protocol: role: 저성능 LLM 또는 주니어 운영자가 그대로 따라야 하는 절차 strict_order: - step: S00_extract_and_identify do: - zip 압축 해제 - AGENTS.md 읽기 - runtime/active_artifact_manifest.yaml 읽기 - manifest가 가리키는 active packet만 열기 never: - Temp에서 최신처럼 보이는 v파일을 임의 선택하지 않는다 - step: S01_validate_before_reading_report do: - npm run full-gate 또는 python tools/run_release_dag_v1.py --mode full 실행 - failed_checks가 0인지 확인 - WARN_ONLY와 FAIL을 구분 never: - 검증 실패 상태에서 투자 액션을 확정하지 않는다 - step: S02_collect_required_numbers do: - portfolio health - cash floor - D+2 cash - PASS_100 gate - execution readiness - per ticker verdict - order blueprint - shadow ledger - data missing list를 packet에서만 복사 never: - 계산기로 보정하거나 평균을 임의로 낸다 - step: S03_render_fixed_sections do: - executive - blockers - action_table - shadow_ledger - data_missing - education_notes 순서로 출력 never: - 하네스가 BLOCK한 주문을 말로 완화하지 않는다 - step: S04_check_numbers_again do: - 모든 숫자의 source_path/json_pointer/formula_id를 확인 - 숫자 단위 원/주/% 확인 - stale 표시 확인 never: - provenance 없는 숫자를 남긴다 - step: S05_publish_or_block do: - validator PASS면 publish - validator FAIL이면 FAIL_BLOCK_PUBLISH와 고칠 파일/명령만 출력 never: - 부분 PASS를 운영 PASS로 표현하지 않는다 minimal_command_sequence: - python tools/validate_specs.py - python tools/validate_golden_coverage_100.py - python tools/validate_calibration_registry_v1.py - python tools/validate_schema_model_generation_v1.py - python tools/validate_gas_thin_adapter_v1.py - python tools/validate_agents_shrink_v1.py - npm run full-gate - npm run validate-report-sync response_contract: 모든 응답은 packet-only 숫자와 DATA_MISSING 표준을 사용한다. release_quality_gates: must_pass_before_operational_use: - validate_specs - validate_schema_model_generation - validate_formula_owner_coverage - validate_golden_coverage_100 - validate_number_provenance - validate_active_manifest_consistency - validate_gas_thin_adapter - validate_report_packet_sync - validate_low_capability_response_contract - full_gate numeric_thresholds: effective_formula_coverage_pct: 100.0 true_missing_formula_count: 0 formula_owner_coverage_pct: 100.0 ungrounded_number_count: 0 active_count_per_formula: 1 authority_collision_count: 0 renderer_calculation_count: 0 live_t20_min_before_active_kelly: 30 golden_test_coverage_ratio_for_active: 1.0 prediction_lift_required_for_new_factor_pct_points: 3.0 late_entry_false_positive_reduction_required_pct: 20.0 publish_blockers: - failed_checks_count > 0 - unresolved_writer_collision_count > 0 - formula_owner_coverage_pct < 100 - ungrounded_number_count > 0 - active packet alias mismatch - LLM numeric_generation_allowed != 0 - renderer_calculation_count > 0 - GAS forbidden business logic without exception file_diet_policy: target_state: 소스는 적고, 계약은 명확하고, 산출물은 manifest로만 접근한다. budgets: AGENTS_md_max_lines: 120 README_operational_commands_max: 5 active_temp_final_packet_count: 1 active_formula_version_per_family: 1 prompt_files_active_max: 3 package_operator_entrypoints_max: 5 archive_rules: - Temp의 오래된 v파일은 artifacts/archive/YYYY-MM-DD로 이동 - artifacts/canonical에는 active가 아닌 참조용 canonical만 둔다 - docs/adr는 결정 근거만 남기고 튜토리얼성 설명은 README나 runbook으로 병합 - prompts는 low_capability, report_renderer, audit 세 종류로 축소 - dist compact/ultra compact는 source와 equivalence test가 있을 때만 유지 pm_operating_model: cadence: weekly: - 토/일 리밸런싱 제안 전 full-gate 실행 - prediction lift dashboard 갱신 - late-entry false positive review - cash defense check including D+2 cash monthly_day_1_11_21: - 중간점검 packet 생성 - rule lifecycle review - retire candidates review - owner coverage audit per_change: - change_request 작성 - shadow run - golden case 추가 - release gate 통과 후 active 승격 roles: quant_owner: 공식 가설, 기대수익, 승격/폐기 조건 승인 data_owner: 필드, freshness, provenance, 결측 정책 승인 engine_owner: Python canonical implementation과 validators 책임 gas_owner: 수집/정규화/표시 adapter 책임 report_owner: packet-only renderer와 저성능 LLM 응답 계약 책임 release_manager: manifest, archive, package, DAG, gate 상태 책임 definition_of_done: - contract exists - schema exists - owner exists - golden cases exist - shadow evidence exists for new factor - Python canonical implementation exists - GAS is thin or exception recorded - number provenance exists - release gate PASS - rollback path documented recommended_immediate_sequence: - '1) P0: active packet alias mismatch 해결' - '2) P0: formula owner coverage 0%를 100%로 올리는 validator 추가' - '3) P0: report-packet numeric sync validator 추가' - '4) P0: Temp active artifact 1개 정책 적용' - '5) P1: golden coverage 100%를 active 승격 기준으로 전환' - '6) P1: GAS business logic inventory 후 Python 이관 순차 진행' - '7) P1: 저성능 LLM packet-only renderer 고정' - '8) P2: factor shadow/evidence/active 승격 대시보드 운영화' success_definition: 저성능 LLM이 final_decision_packet_active와 이 YAML의 TODO만 읽어도, 고성능 LLM과 동일한 숫자·동일한 차단·동일한 액션 테이블·동일한 DATA_MISSING 판단을 출력하면 성공이다. task_execution_status: summary: completed: 36 blocked: 0 total: 36 operational_ready: false items: - id: T001 status: PASS evidence: - runtime/active_artifact_manifest.yaml canonical_source moved to final_decision_packet_active.json - AGENTS.md reads Temp/final_decision_packet_active.json only - python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict: PASS - id: T002 status: PASS evidence: - tools/build_final_decision_packet_v3.py and tools/build_final_decision_packet_v4.py now read Temp/final_decision_packet_active.json - runtime/active_artifact_manifest.yaml removes v1/v2 precedence from active source routing - python tools/run_release_dag_v1.py --mode release: PASS - id: T003 status: PASS evidence: - tools/validate_report_packet_sync_v1.py added - package.json validate-report-packet-sync added - tools/run_release_dag_v1.py release/full now includes the packet/report sync check - python tools/validate_report_packet_sync_v1.py --packet Temp/final_decision_packet_active.json --report Temp/operational_report.json: PASS - id: T004 status: PASS evidence: - tools/render_operational_report.py now attaches numeric_provenance to numeric sections in the active report - tools/validate_number_provenance_v1.py now checks the required source_path/json_pointer/formula_id/input_hash/freshness_status fields - python tools/validate_number_provenance_v1.py: PASS - id: T005 status: PASS evidence: - package.json now exposes the five top-level ops:* entrypoints - tools/validate_operator_entrypoints_v1.py added - python tools/validate_operator_entrypoints_v1.py: PASS - id: T006 status: PASS evidence: - prompts/low_capability_report_renderer.md now forces DATA_MISSING — 하네스 업데이트 필요 - spec/render/renderer_contract.yaml uses final_decision_packet_active.json and DATA_MISSING token - id: T010 status: PASS evidence: - python tools/validate_formula_owner_coverage_v1.py: PASS - owner_coverage_pct=100.0 - id: T011 status: PASS evidence: - tools/validate_change_request_coverage_v1.py added - python tools/validate_change_request_coverage_v1.py: PASS - id: T012 status: PASS evidence: - python tools/validate_golden_coverage_100.py: PASS - golden_coverage_ratio=1.0000 - id: T013 status: PASS evidence: - python tools/validate_output_field_owner_collision_v1.py: PASS - unresolved_writer_collision_count=0 - id: T014 status: PASS evidence: - tools/validate_formula_version_lifecycle_v1.py added - python tools/validate_formula_version_lifecycle_v1.py: PASS - id: T015 status: PASS evidence: - tools/validate_adr_spec_links_v1.py added - python tools/validate_adr_spec_links_v1.py: PASS - id: T020 status: PASS evidence: - tools/audit_gas_business_logic_v1.py now emits a full function inventory with allowed_responsibility tagging - Temp/gas_business_logic_audit_v1.json records function_inventory_coverage_pct=100.0 - python tools/audit_gas_business_logic_v1.py --out Temp/gas_business_logic_audit_v1.json: PASS - id: T021 status: PASS evidence: - python tools/audit_gas_business_logic_v1.py --out Temp/gas_business_logic_audit_v1.json: PASS (forbidden_function_count=0) - python tools/validate_gas_thin_adapter_v1.py: PASS (forbidden_gas_business_logic_count=0) - id: T022 status: PASS evidence: - schemas/generated/gas_adapter_contract.schema.json added - python tools/validate_gas_call_arity.py: PASS - package.json validate-gas-call-arity script already wired - id: T023 status: PASS evidence: - tools/build_data_freshness_sla_v1.py added - freshness_status is propagated from harness_context into the freshness SLA artifact - python tools/build_data_freshness_sla_v1.py: PASS - id: T024 status: PASS evidence: - tools/validate_account_snapshot_contract_v1.py added - python tools/validate_account_snapshot_contract_v1.py: PASS - id: T025 status: PASS evidence: - tools/gas_deployment_checklist_v1.py added as the operator-facing checklist wrapper - python tools/gas_deployment_checklist_v1.py --mode release: PASS - python tools/run_deployment_checklist_v1.py --mode release: PASS - id: T030 status: PASS evidence: - prompts/low_capability_report_renderer.md and spec/render/renderer_contract.yaml point to final_decision_packet_active.json - python tools/validate_no_temp_runtime_read_v1.py: PASS - python tools/validate_renderer_no_calculation_v1.py: PASS - id: T031 status: PASS evidence: - tools/validate_low_capability_response_contract_v3.py added - python tools/validate_low_capability_response_contract_v3.py: PASS - python tools/validate_renderer_section_order_v1.py: PASS - id: T032 status: PASS evidence: - tools/validate_report_numerical_sync_v1.py added - python tools/validate_report_numerical_sync_v1.py: PASS - id: T033 status: PASS evidence: - tools/build_llm_narrative_template_lock_v1.py run on Temp/operational_report.json - python tools/validate_prompt_formula_leak_v1.py: PASS - id: T034 status: PASS evidence: - tools/validate_order_grammar_v1.py added - python tools/validate_order_grammar_v1.py: PASS - id: T040 status: PASS evidence: - suggest/factor_rfc_template.yaml added - python tools/validate_factor_contract_v1.py: PASS - id: T041 status: PASS evidence: - tools/build_prediction_lift_dashboard_v1.py added - python tools/build_prediction_lift_dashboard_v1.py: PASS - id: T042 status: PASS evidence: - tools/build_anti_late_chase_v6.py added - python tools/build_anti_late_chase_v6.py: PASS - id: T043 status: PASS evidence: - tools/build_smart_money_liquidity_composite_v4.py added - python tools/build_smart_money_liquidity_composite_v4.py: PASS - id: T044 status: PASS evidence: - tools/build_fundamental_raw_evidence_v4.py added - python tools/build_fundamental_raw_evidence_v4.py: PASS - python tools/validate_imputed_data_exposure_v1.py: PASS - id: T045 status: PASS evidence: - tools/build_sell_waterfall_engine_v3.py added - python tools/build_sell_waterfall_engine_v3.py: PASS - id: T046 status: PASS evidence: - tools/build_performance_readiness_replay_bridge_v2.py added - python tools/build_performance_readiness_replay_bridge_v2.py: PASS - id: T050 status: PASS evidence: - tools/clean_temp_artifacts_v1.py --apply archived release_gate_summary_v1/v2/v3.json - artifacts/archive/20260606/temp_cleanup_manifest_v1.json written with hashes - runtime consumers remain pointed at active artifacts only - id: T051 status: PASS evidence: - python tools/validate_tool_thin_wrapper_v1.py: PASS - python tools/validate_architecture_boundaries_v2.py: PASS - python tools/run_release_dag_v1.py --mode release: PASS - tools/measure_yaml_gs_ps_coverage.py, tools/run_engine_audit_golden_cases_v1.py, and tools/run_integration_test_v1.py now route through src/quant_engine wrappers - id: T052 status: PASS evidence: - AGENTS.md is reduced to the core operating constitution and read order - python tools/validate_agents_shrink_v1.py: PASS - id: T053 status: PASS evidence: - tools/prepare_upload_zip.py now trims Temp noise to the active whitelist - python tools/validate_packaging_policy_v2.py --zip ..\data_feed.zip: PASS - python tools/validate_packaging_policy_v1.py --zip ..\data_feed.zip --policy spec/47_packaging_policy.yaml: PASS - id: T054 status: PASS evidence: - spec/release/repository_entropy_budget.yaml added - tools/audit_repository_entropy_v2.py added - python tools/audit_repository_entropy_v2.py --root . --out Temp/repo_entropy_v2.json: PASS - id: T055 status: PASS evidence: - python tools/validate_compact_bundle_equivalence_v1.py: PASS