meta: schema_version: quant_engine_refactor_todo.v1 formula_id: QEDD_REFACTOR_TODO_V1 title: 퀀트투자 엔진 구조적 리팩토링 실행계획 generated_at_kst: '2026-06-07T18:24:13+09:00' target_engine: 은퇴자산포트폴리오 / 자산 투자 포트폴리오 role_assumption: 30년 퀀트투자자 + 개발자 + 아키텍트 + PM 관점 user_goal: 목표금액 5억, 주간 제안 기본, 토/일 리밸런싱, 매월 1/11/21 중간점검 source_zip_sha256: c05591f833698d8beb24934031cdbc0d576a6c9617c7566dba001d0f741a2f17 source_basis: - AGENTS.md - governance/rules/*.yaml - spec/*.yaml - runtime/active_artifact_manifest.yaml - runtime/refactor_baseline_v1.yaml - Temp/engine_harness_gate_result.json - Temp/strategy_hardening_harness_v2.json - Temp/formula_runtime_registry_v1.json - Temp/pipeline_runtime_profile_v1.json - spec/41_release_dag.yaml - spec/48_module_io_contract_registry.yaml source_file_policy: allowed_human_edited_source_extensions: - .md - .yaml - .py - .gs generated_or_runtime_extensions_allowed: - .json - .jsonl - .schema.json principle: 사람이 고치는 권위 파일은 md/yaml/py/gs로 제한하고, json은 산출물·스키마·패킷으로만 취급한다. executive_decision: recommended_methodology: 'QEDD: Quant Evidence-Driven Deterministic Development' one_sentence: 새 알고리즘은 YAML 계약과 증거 하네스가 먼저 통과한 뒤 Python canonical로 구현하고, GAS는 얇은 어댑터, LLM은 복사 렌더러로만 사용한다. decision: 현재 구조는 방향은 맞지만 운영성공 엔진으로 보기에는 성과검증·릴리즈 게이트·아키텍처 경계가 아직 미완성이다. 기능 추가보다 경계·검증·문서 다이어트가 우선이다. priority_order: - P0 릴리즈 게이트를 SKIPPED에서 OK로 되돌린다. - P1 active/canonical artifact alias 버전 드리프트를 제거한다. - P2 architecture boundary validator를 spec 목표와 일치시킨다. - P3 low-capability LLM용 context pack v5를 실제 산출물로 고정한다. - P4 신규 알파/전략은 live T+20 표본 30개 전에는 ACTIVE 금지한다. - P5 GAS business logic을 Python canonical로 이전하고 GAS는 fetch/write adapter로 제한한다. baseline_assessment: repository_metrics_observed_from_zip: observed_file_count_in_unzipped_package: 1438 extension_counts_top: py: 839 json: 374 yaml: 171 md: 39 gs: 8 ps1: 4 jsonl: 2 js: 1 runtime_refactor_baseline_total_file_count: 1906 runtime_refactor_baseline_package_script_count: 22 runtime_refactor_baseline_temp_json_count: 411 entropy_budget: schema_version: repository_entropy_budget.v1 max_total_files: 2000 max_package_scripts: 220 max_temp_json_files: 500 max_docs_lines: 120000 release_budget_notes: - archive stale Temp JSONs when safe - keep package scripts within release envelope current_pass_points: active_manifest_report_match_pct: 100.0 active_manifest_authority_collision_count: 0 active_manifest_stale_artifact_count: 0 engine_harness_status: OK engine_harness_failed_checks_count: 0 formula_runtime_coverage_pct: 100.0 formula_unmapped_count: 0 strategy_control_score: 92.73 data_quality_conflict_flag: false critical_gaps_to_fix_before_more_algorithm_expansion: - gap_id: GAP-001-release-profile-skipped-validation evidence: Temp/pipeline_runtime_profile_v1.json.gate_status: SKIPPED Temp/pipeline_runtime_profile_v1.json.runtime_context.skip_validate: true elapsed_sec_total: 2.471 risk: 릴리즈 모드라는 이름으로 zip만 만들면 저성능 LLM/운영자가 검증 통과로 오인한다. fix: release 모드에서는 skip_validate=false를 강제하고, package-only만 SKIPPED 허용. - gap_id: GAP-002-architecture-boundary-contract-drift evidence: spec/34_expected_renderer_calculation_count: 0 spec/34_expected_reverse_dependency_count: 0 observed_validate_architecture_boundaries_v2_stdout: renderer_calculation_count=288, reverse_dependency_count=7, gate=PASS risk: 검증기가 목표값과 다르게 PASS를 낼 수 있으면 아키텍처 하네스의 신뢰가 무너진다. fix: validator를 spec/34의 contracts와 직접 비교하도록 고정하고 위반 시 FAIL. - gap_id: GAP-003-active-canonical-version-drift evidence: active_manifest_manifest_rows_contains: smart_cash_recovery_v7 artifacts/canonical_manifest.yaml_points_to: smart_cash_recovery_v9 active_manifest_report_authority_diff_count: 0 risk: 권위 alias가 여러 버전을 동시에 말하면 같은 숫자라도 출처 신뢰가 흔들린다. fix: canonical resolver가 active_manifest를 재생성하고 deprecated 버전 runtime read를 차단. - gap_id: GAP-004-low-capability-context-version-mismatch evidence: release_dag_expected_output: Temp/final_context_for_llm_v5.yaml package_observed_context_file: Temp/final_context_for_llm_v4.yaml risk: 저성능 LLM이 읽을 단일 packet이 없으면 다시 원본 여러 파일을 읽으며 환각과 판단 번복이 증가한다. fix: v5 context pack을 생성·검증·패키징하고 v4는 deprecated 처리. - gap_id: GAP-005-performance-readiness-not-active evidence: overall_hardening_score: 68.22 truth_hardening_score: 68.22 readiness_gate: WATCH_PENDING_SAMPLE prediction_match_rate_pct: 45.68 algorithm_guidance_proof: 56.4 operational_t20_count: 0.0 cash_recovery_value_damage_pct: 12.5 readiness_reasons: - DATA_INTEGRITY_LOCK_NOT_PASS_100 - OPERATIONAL_T20_SAMPLE_LT_30 - OPERATIONAL_T20_PASS_LT_60 - EXPECTANCY_LE_0_1 - WIN_RATE_LT_45 - PREDICTION_MATCH_LT_60 - VALUE_DAMAGE_GT_10 risk: 통제 점수는 높지만 실전 성과 표본이 부족해 매수/매도 뒷북 문제를 아직 수치로 해소하지 못했다. fix: 리플레이와 실전 표본을 분리하고 T+20 30건 이상, pass>=60%, expectancy>0.1% 전에는 active 승격 금지. - gap_id: GAP-006-generated-file-sprawl evidence: python_files_count: 839 yaml_files_count: 171 json_files_count: 374 generated_schema_model_dirs: - schemas/generated - src/quant_engine/models/generated - runtime/python/core/formulas/generated risk: 생성물이 권위 파일처럼 다뤄지면 파편화·상호충돌·리뷰비용 증가가 발생한다. fix: generated는 build artifact로 선언하고 수동 편집 금지, 단일 generator와 parity validator로만 갱신. target_architecture: architecture_name: Contract-First Quant Engine with Deterministic Harness one_way_flow: - data - feature - risk - alpha - decision_fsm - execution_blueprint - report_renderer - llm_copy_only authority_stack_high_to_low: - spec/00_execution_contract.yaml - spec/risk/*.yaml 및 spec/03_risk_policy.yaml - spec/13_formula_registry.yaml - spec/48_module_io_contract_registry.yaml - governance/rules/*.yaml - src/quant_engine canonical Python - gas_*.gs thin adapter - Temp/*.json runtime outputs - prompts/*.md copy-only renderers module_boundaries: data_ingestion: allowed: - 수집 - 정규화 - freshness - schema validation forbidden: - 매수/매도 판단 - 점수 가중치 변경 feature_engine: allowed: - 등록 공식 계산 - 결측 처리 - provenance 기록 forbidden: - final_action 확정 risk_manager: allowed: - cash floor - total heat - hard stop - position cap - D+2 현금 방어선 판정 forbidden: - 목표수익률 명분으로 risk 완화 alpha_engine: allowed: - factor score - regime adjustment - lead/lag evidence forbidden: - live 표본 부족 상태에서 ACTIVE 승격 decision_fsm: allowed: - BUY/HOLD/TRIM/SELL/WATCH final_action 결정 forbidden: - renderer/LLM에서 final_action 재판단 execution_engine: allowed: - tick normalization - single price per row - order blueprint forbidden: - 다중 조건 주문문 - stale TP 표기 report_renderer: allowed: - packet 숫자 복사 - provenance 표시 - 차단사유 표시 forbidden: - 계산 - 게이트 완화 서술 - 가격/수량 창작 llm_layer: allowed: - 요약 - 교육노트 - 하네스 출력의 사람이 읽는 설명 forbidden: - 하네스 verdict 번복 - 숫자 생성 - 미등록 공식 생성 directory_policy: AGENTS.md: 운영 인덱스만 유지. 장문 규칙 금지. spec/: 계약·공식·게이트·출력 스키마의 원본 권위. governance/: ADR, rule hash, change request, lifecycle. src/quant_engine/: canonical implementation. 신규 로직은 여기서 시작. tools/: CLI wrapper, validator, builder. 핵심 비즈니스 로직 축적 금지. gas_*.gs: Google Sheets fetch/write/render adapter. 공식/판단 로직 신규 추가 금지. Temp/: runtime output only. 직접 편집 금지. dist/: packaged compact output only. prompts/: copy-only renderer prompt. 계산 지시 금지. tests/: unit/golden/property/parity/replay/llm_regression/e2e. qedd_methodology: principles: - 'Contract before code: YAML 계약 없이 Python/GAS 구현 금지.' - 'Harness before narrative: 하네스 수치가 보고서 문장보다 우선.' - 'Python canonical first: 계산/판단은 Python에, GAS는 adapter에 둔다.' - 'No LLM math: LLM은 가격·수량·TP·SL·점수를 계산하지 않는다.' - 'Single source of truth: active manifest alias 하나만 runtime source가 된다.' - 'Shadow before active: 새 알고리즘은 shadow ledger와 live/replay 분리 검증을 거친다.' - 'Small files, hard gates: 긴 문서보다 짧은 계약, 자동 검증, golden case를 우선한다.' - 'Evidence retirement: 성과 없는 규칙은 유지하지 않고 조건부 은퇴시킨다.' algorithm_lifecycle: states: - PROPOSED - SPEC_LOCKED - SHADOW - PAPER_ACTIVE - LIMITED_ACTIVE - ACTIVE - RETIRED transition_rules: PROPOSED_to_SPEC_LOCKED: - spec yaml 존재 - owner 지정 - input/output/provenance/결측정책 정의 - golden case 최소 3개 SPEC_LOCKED_to_SHADOW: - Python implementation 존재 - schema/model parity PASS - unit/golden/property PASS SHADOW_to_PAPER_ACTIVE: - replay/live 분리 ledger 기록 - 성능지표가 baseline 대비 개선 - 위험/거래비용 고려 PAPER_ACTIVE_to_LIMITED_ACTIVE: - operational_t20_count >= 30 - prediction_match_rate_pct >= 60 - value_damage_pct <= 10 LIMITED_ACTIVE_to_ACTIVE: - expectancy_pct > 0.1 - win_rate_pct >= 45 - max_drawdown within risk budget - 2회 연속 주간 리뷰 PASS ANY_to_RETIRED: - retirement_condition 충족 - 더 단순한 규칙으로 대체 가능 - data availability 저하 또는 성과 훼손 mandatory_fields_per_algorithm: - formula_id - purpose - inputs - outputs - units - missing_policy - provenance_required - owner - risk_limit - shadow_metric - activation_threshold - retirement_condition - golden_cases - property_invariants - live_replay_label quant_research_standards: minimum_tests: - walk_forward split - purged/embargoed time split when overlapping labels exist - decile monotonicity or threshold stability check - turnover/slippage/capacity check - crisis/regime stress check - sector concentration check - cash-defense impact check anti_overfit_rules: - 단일 종목/단일 기간 최적화 금지 - threshold는 후보군/검증군 분리 - 리플레이 성과를 live 성과로 표기 금지 - 샘플 30 미만은 ACTIVE 금지 factor_taxonomy_required: - momentum - quality - value - growth - liquidity - smart_money - risk - regime - execution_quality document_diet_policy: AGENTS_md_max_lines: 120 one_topic_one_authority_file: true adr_rule: 되돌리기 어려운 아키텍처 결정만 ADR 작성. 일반 TODO는 spec 또는 governance/change_requests에 둔다. duplicate_policy: 같은 개념의 v1/v2/v3가 공존하면 canonical_manifest에 active 1개와 deprecated 목록을 반드시 남긴다. review_question: 이 문서가 하네스/계약/검증에 직접 쓰이지 않으면 삭제 또는 archive 후보다. low_capability_llm_execution_card: read_order: - 1. AGENTS.md - 2. runtime/active_artifact_manifest.yaml - 3. spec/00_execution_contract.yaml - 4. spec/13_formula_registry.yaml - 5. spec/48_module_io_contract_registry.yaml - 6. Temp/final_context_for_llm_v5.yaml 또는 active manifest alias packet - 7. 본 YAML의 todo_roadmap fixed_response_rules: - 숫자가 필요한 문장은 source_path/json_pointer/formula_id가 없으면 DATA_MISSING으로 쓴다. - 매수/매도 판단은 final_decision_packet의 final_action만 복사한다. - 하네스 값이 없으면 질문하지 말고 하네스 업데이트 TODO를 만든다. - 주문표는 single numeric price per row만 허용한다. - blocked/limited라도 산출된 가격·수량·차단사유는 shadow ledger에 남긴다. - D+2 정산현금은 즉시현금 방어선 충족 현금으로 인정한다. - 토/일에는 weekly rebalance, 매월 1/11/21에는 mid-cycle check 섹션을 반드시 출력한다. output_template_order: - executive - blockers - portfolio_health - action_table - sell_priority - shadow_ledger - data_missing - education_notes - next_validation_commands todo_roadmap: - phase_id: P0_STABILIZE_AND_FREEZE objective: 새 기능 추가를 멈추고 현재 권위·릴리즈·아키텍처 경계의 진실성을 고정한다. exit_gate: release gate OK, skip_validate=false, active/canonical alias drift=0, architecture boundary violations=0 tasks: - task_id: P0-01 priority: P0 title: 릴리즈 SKIPPED 금지 owner: architect objective: release 모드에서 검증 생략을 원천 차단한다. target_files: - tools/prepare_upload_zip.py - tools/run_release_dag_v3.py - package.json - spec/41_release_dag.yaml method_steps: - prepare_upload_zip.py에서 validation_mode=release이면 skip_validate 인자를 무시하거나 에러 처리한다. - pipeline_runtime_profile_v1.json.runtime_context.skip_validate=false를 기록한다. - gate_status는 OK 또는 FAIL만 허용하고 SKIPPED는 package-only에서만 허용한다. - package.json ops:package와 prepare-upload-zip 스크립트가 동일한 정책을 쓰게 한다. acceptance_criteria: - Temp/pipeline_runtime_profile_v1.json.gate_status == OK - Temp/pipeline_runtime_profile_v1.json.runtime_context.skip_validate == false - failed_checks == [] validation_commands: - npm run ops:package - python tools/validate_pipeline_runtime_contract.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P0-02 priority: P0 title: active/canonical alias 단일화 owner: architect objective: active manifest와 canonical manifest가 같은 active artifact를 가리키게 한다. target_files: - runtime/active_artifact_manifest.yaml - artifacts/canonical_manifest.yaml - tools/build_canonical_artifact_resolver_v1.py - tools/validate_active_manifest.py method_steps: - canonical_manifest의 concepts별 canonical_path를 읽는다. - active_artifact_manifest의 source_precedence/manifest_rows에서 deprecated v값을 탐지한다. - resolver가 active manifest를 재생성할 때 canonical_manifest를 우선하도록 수정한다. - deprecated artifact runtime read가 있으면 validation FAIL로 바꾼다. acceptance_criteria: - authority_collision_count == 0 - stale_artifact_count == 0 - single_truth_conflict_count == 0 - manifest_rows에 deprecated canonical mismatch 없음 validation_commands: - python tools/build_canonical_artifact_resolver_v1.py - python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P0-03 priority: P0 title: 아키텍처 경계 validator를 계약값과 일치 owner: architect objective: spec/34의 0-count 계약을 validator가 그대로 강제하게 만든다. target_files: - spec/34_architecture_boundaries.yaml - tools/validate_architecture_boundaries_v2.py - tools/build_architecture_boundaries_v2.py - tests/unit/test_architecture_boundaries.py method_steps: - validator가 spec/34 contracts.renderer_calculation_count와 reverse_dependency_count를 읽도록 한다. - 관측값이 계약값보다 크면 gate=FAIL로 반환한다. - 허용 예외가 필요하면 spec에 allowlist를 명시하고 만료일을 둔다. - 현재 관측 288/7의 실제 원인을 function/file 단위로 출력하게 한다. acceptance_criteria: - renderer_calculation_count == 0 - reverse_dependency_count == 0 - allowlist_count == 0 또는 만료일 존재 - gate == PASS only when contract satisfied validation_commands: - python tools/build_architecture_boundaries_v2.py - python tools/validate_architecture_boundaries_v2.py - python tools/validate_renderer_no_calculation_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P0-04 priority: P0 title: low-capability context v5 산출물 고정 owner: architect objective: release DAG와 실제 Temp 산출물의 context pack 버전을 일치시킨다. target_files: - tools/build_low_capability_context_pack_v5.py - spec/46_low_capability_execution_pack.yaml - spec/41_release_dag.yaml - Temp/final_context_for_llm_v5.yaml method_steps: - build_final_context 노드를 실행해 v5를 생성한다. - v4 파일은 archive 또는 deprecated로 분류한다. - validate_low_capability_pack_v1.py가 required_sections를 모두 검사하게 한다. - 패키징 화이트리스트에 v5만 포함한다. acceptance_criteria: - Temp/final_context_for_llm_v5.yaml exists - required_sections all present - v4 runtime reference count == 0 validation_commands: - python tools/build_low_capability_context_pack_v5.py --manifest runtime/active_artifact_manifest.yaml --packet Temp/final_decision_packet_v4.json --out Temp/final_context_for_llm_v5.yaml - python tools/validate_low_capability_pack_v1.py --context Temp/final_context_for_llm_v5.yaml --contract spec/46_low_capability_execution_pack.yaml rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P0-05 priority: P0 title: 권위 파일 해시 고정 owner: architect objective: AGENTS/governance/spec의 변경 감사를 자동화한다. target_files: - governance/agents_index.yaml - governance/agents_rule_hashes.yaml - tools/build_agents_rule_hashes_v1.py - tools/validate_agents_shrink_v1.py method_steps: - rule 파일별 sha256을 재생성한다. - AGENTS.md는 120라인 이하 index 역할만 유지한다. - rule hash mismatch가 있으면 release FAIL. - 변경 사유는 governance/change_requests/*.yaml에 남긴다. acceptance_criteria: - AGENTS_SHRINK_OK - rule hash mismatch count == 0 - change_request exists for every rule change validation_commands: - python tools/build_agents_rule_hashes_v1.py - python tools/validate_agents_shrink_v1.py - python tools/validate_change_requests_v1.py --dir governance/change_requests --strict rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P1_CONTRACT_FIRST_REFACTOR objective: 새 알고리즘 확장 전에 계약·모듈 IO·공식 lifecycle을 한 장의 권위체계로 묶는다. exit_gate: module_io_schema_coverage_pct=100, formula lifecycle required_fields complete, owner ledger complete tasks: - task_id: P1-01 priority: P1 title: 리팩토링 방법론 계약 추가 owner: architect objective: 본 YAML의 핵심 규칙을 repo 내부 공식 계약으로 승격한다. target_files: - spec/49_refactor_methodology_contract.yaml - governance/adr/0011-qedd-methodology.md - AGENTS.md method_steps: - spec/49에 QEDD 원칙, 권위순서, 파일정책, DoD를 작성한다. - ADR-0011에 왜 QEDD를 채택했는지 20줄 이내로 기록한다. - AGENTS.md에는 링크 한 줄만 추가한다. - 중복되는 장문 설명은 README/prompts에서 제거한다. acceptance_criteria: - spec/49 exists - AGENTS line count <= 120 - ADR exists - 중복 장문 문서 0개 validation_commands: - python tools/validate_specs.py - python tools/validate_agents_shrink_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P1-02 priority: P1 title: 모듈 IO registry를 실코드와 1:1 매핑 owner: architect objective: spec/48의 module_io_contract_registry를 실제 src/tools 경로와 동기화한다. target_files: - spec/48_module_io_contract_registry.yaml - tools/build_module_io_coverage_v1.py - tools/validate_module_io_coverage_v1.py method_steps: - 모든 핵심 모듈을 data_ingestion/feature/risk/alpha/decision/execution/report/evaluation/adapters로 분류한다. - 각 모듈의 inputs/outputs/schema/artifact_path를 필수화한다. - registry에 없는 Python builder가 있으면 FAIL 또는 archive 후보로 분류한다. - tools는 wrapper인지 builder인지 role 필드를 추가한다. acceptance_criteria: - module_io_schema_coverage_pct == 100.0 - unregistered_core_script_count == 0 - wrapper_has_no_business_logic == true validation_commands: - python tools/build_module_io_coverage_v1.py - python tools/validate_module_io_coverage_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P1-03 priority: P1 title: 공식 lifecycle registry 생성 owner: architect objective: 292개 formula의 상태와 owner/retirement 조건을 전부 원장화한다. target_files: - spec/51_formula_lifecycle_registry.yaml - spec/35_rule_lifecycle_governance_v3.yaml - tools/build_factor_lifecycle_registry_v1.py - tools/validate_factor_lifecycle_v1.py method_steps: - formula_registry의 모든 formula_id를 읽는다. - 각 formula에 lifecycle_state, owner, activation_threshold, retirement_condition, expected_metric을 채운다. - python_only/GAS_only/runtime 분류를 함께 기록한다. - owner 없는 공식은 신규 변경 금지로 표시한다. acceptance_criteria: - formula_count == formula_runtime_registry.formula_total - missing_owner_count == 0 - missing_retirement_condition_count == 0 - lifecycle_state in allowed states validation_commands: - python tools/build_factor_lifecycle_registry_v1.py - python tools/validate_factor_lifecycle_v1.py --taxonomy spec/43_quant_factor_taxonomy.yaml rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P1-04 priority: P1 title: 숫자 provenance 계약을 보고서 필수조건으로 강화 owner: architect objective: 모든 보고서 숫자가 source_path/json_pointer/formula_id/input_hash를 가진다. target_files: - spec/45_number_provenance_contract.yaml - tools/build_number_provenance_ledger_v4.py - tools/validate_number_provenance_strict_v3.py - tools/render_operational_report.py method_steps: - report_renderer가 숫자를 쓸 때 provenance ledger에서만 가져오게 한다. - 숫자 문자열 formatting 전 원본 json_pointer를 기록한다. - provenance 없는 숫자는 DATA_MISSING으로 렌더링한다. - 교육노트의 예시 숫자도 provenance_required=false 예외 태그를 요구한다. acceptance_criteria: - unprovenanced_number_count == 0 - provenance ledger freshness_status all OK or DATA_MISSING - report validation PASS validation_commands: - python tools/build_number_provenance_ledger_v4.py --packet Temp/final_decision_packet_v4.json --out Temp/number_provenance_ledger_v4.json - python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json --report Temp/operational_report.md rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P1-05 priority: P1 title: 파일 다이어트 예산을 release gate로 연결 owner: architect objective: 문서·Temp·generated sprawl을 수치 예산으로 관리한다. target_files: - runtime/refactor_baseline_v1.yaml - tools/audit_repository_entropy_v2.py - tools/clean_temp_artifacts_v1.py - spec/50_repository_entropy_budget.yaml method_steps: - 현재 budget max_total_files=2000을 유지하되 target_total_files=1600을 추가한다. - Temp json target<=250, docs lines target<=30000을 추가한다. - generated 파일은 generator/source_hash 없으면 FAIL. - archive 후보는 temp_cleanup_manifest에 기록 후 삭제한다. acceptance_criteria: - total_file_count <= 2000 - target trend decreasing week over week - temp_json_count <= 500 hard / <=250 target - manual_generated_edit_count == 0 validation_commands: - python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v1.yaml - python tools/clean_temp_artifacts_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P2_PYTHON_CANONICAL_AND_GAS_THIN_ADAPTER objective: 계산/판단을 Python canonical로 집중시키고 GAS를 입출력 어댑터로 축소한다. exit_gate: GAS business logic 신규 추가 0, Python parity PASS, GAS adapter validation PASS tasks: - task_id: P2-01 priority: P2 title: GAS business logic 인벤토리 작성 owner: architect objective: gas_*.gs 함수의 역할을 adapter/helper/business_logic으로 분류한다. target_files: - tools/audit_gas_business_logic_v1.py - gas_data_feed.gs - gas_lib.gs - gas_harness_rows.gs - spec/39_gas_thin_adapter_policy.yaml method_steps: - GAS 함수명/라인/호출관계를 추출한다. - 공식 계산 또는 final_action 판단을 business_logic으로 분류한다. - business_logic은 Python 이전 후보로 기록한다. - adapter 허용 책임은 fetch, write, sheet mapping, cache only로 제한한다. acceptance_criteria: - gas_business_logic_new_count == 0 - existing_business_logic_migration_plan_exists - thin_adapter_policy PASS validation_commands: - python tools/audit_gas_business_logic_v1.py - python tools/validate_gas_thin_adapter_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P2-02 priority: P2 title: 공식 구현 Python canonical화 owner: architect objective: GAS에 남은 핵심 공식은 src/quant_engine/formulas로 이전한다. target_files: - src/quant_engine/core/formulas/ - runtime/python/core/formulas/generated/ - spec/13_formula_registry.yaml - tools/compile_formula_registry_v1.py method_steps: - formula_id별 Python function signature를 표준화한다. - inputs_used/missing_inputs/result/rule_id/provenance를 반환한다. - GAS 결과와 Python 결과를 golden row로 비교한다. - 동일 공식이 GAS/Python에 둘 다 있으면 canonical_runtime=PYTHON, gas_runtime=adapter로 선언한다. acceptance_criteria: - python_formula_parity_pass_pct == 100 - runtime_adjusted_coverage_pct == 100 - unmapped_formula_count == 0 validation_commands: - python tools/compile_formula_registry_v1.py - python tools/validate_formula_runtime_registry_v1.py - python tools/validate_schema_model_generation_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P2-03 priority: P2 title: GAS adapter contract 테스트 owner: architect objective: GAS는 Python 산출 packet을 sheet에 반영하는 기능만 검증한다. target_files: - spec/39_gas_thin_adapter_policy.yaml - schemas/generated/gas_adapter_contract.schema.json - tools/validate_gas_call_arity.py - tools/validate_gas_thin_adapter_v1.py method_steps: - GAS public entrypoint의 인자 개수를 contract로 고정한다. - GAS가 계산한 숫자가 보고서 authority가 되지 못하게 source whitelist를 설정한다. - GAS call arity와 adapter role을 release gate에 넣는다. acceptance_criteria: - validate_gas_call_arity PASS - validate_gas_thin_adapter_v1 PASS - runtime_source_whitelist violation_count == 0 validation_commands: - npm run validate-gas-call-arity - python tools/validate_gas_thin_adapter_v1.py - python tools/validate_runtime_source_whitelist_v1.py --manifest runtime/active_artifact_manifest.yaml --scan src tools rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P2-04 priority: P2 title: generated model 단일 생성기 고정 owner: architect objective: schemas/generated, src models/generated, runtime generated의 관계를 하나의 generator로 묶는다. target_files: - tools/generate_models_from_schema.py - schemas/generated/ - src/quant_engine/models/generated/ - runtime/python/core/formulas/generated/ method_steps: - schema를 source로 Python model을 생성한다. - generated 파일 상단에 source_schema_hash를 삽입한다. - 수동 편집 감지를 위해 generated manifest를 만든다. - schema/model parity validator가 hash mismatch를 FAIL한다. acceptance_criteria: - schema_model_generation PASS - generated_hash_mismatch_count == 0 - manual_edit_count == 0 validation_commands: - python tools/generate_models_from_schema.py - python tools/validate_schema_model_generation_v1.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P3_STRATEGY_HARNESS_AND_PERFORMANCE_TRUTH objective: 좋아 보이는 알고리즘이 아니라 실전성과를 개선하는 알고리즘만 살아남게 만든다. exit_gate: operational_t20_count>=30, pass_rate>=60, prediction_match>=60, value_damage<=10, readiness ACTIVE or LIMITED_ACTIVE tasks: - task_id: P3-01 priority: P3 title: 성과 readiness hard gate 강화 owner: architect objective: WATCH_PENDING_SAMPLE 상태에서 active 승격을 차단한다. target_files: - Temp/strategy_hardening_harness_v2.json - tools/build_strategy_hardening_harness_v2.py - tools/validate_strategy_tests_contract.py method_steps: - targets를 validator가 직접 읽도록 한다. - readiness_reasons 중 하나라도 남으면 ACTIVE 금지. - overall_hardening_score가 높아도 performance_score가 낮으면 WATCH 유지. - 보고서는 WATCH_PENDING_SAMPLE을 솔직하게 표시한다. acceptance_criteria: - readiness_gate != ACTIVE when operational_t20_count < 30 - prediction_match_rate_pct target applied - value_damage target applied validation_commands: - python tools/build_strategy_hardening_harness_v2.py - python tools/validate_strategy_tests_contract.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P3-02 priority: P3 title: 뒷북/설거지 방지 하네스 정교화 owner: architect objective: late entry와 distribution presignal을 매수 차단 이전 단계에 배치한다. target_files: - tools/build_late_chase_attribution_v2.py - tools/build_anti_late_entry_pullback_gate_v4.py - tools/build_distribution_exit_presignal_v2.py - spec/04_strategy_rules.yaml method_steps: - 매수 후보마다 entry_timing_decile, flow_acceleration, overhang, distribution_risk를 계산한다. - 상승 말기 신호가 일정 이상이면 BUY를 WATCH/PULLBACK_WAIT로 낮춘다. - pullback trigger가 없으면 추격매수 수량을 0으로 둔다. - 매수 차단 사유를 shadow ledger에 남긴다. acceptance_criteria: - late_chase_false_buy_count decreases week over week - BUY without pullback_trigger count == 0 - distribution_warning_before_sell_count tracked validation_commands: - python tools/build_late_chase_attribution_v2.py --json GatherTradingData.json --out Temp/late_chase_attribution_v2.json - python tools/validate_anti_late_entry_harness_v1.py --json Temp/late_chase_attribution_v2.json rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P3-03 priority: P3 title: 수익금 방어 value preservation 개선 owner: architect objective: 익절 후 반납과 손실 확대를 별도 점수로 관리한다. target_files: - tools/build_value_preservation_scorer_v2.py - tools/build_profit_giveback_ratchet_v2.py - tools/build_sell_execution_timing_lock_v2.py - spec/06_exit_policy.yaml method_steps: - profit_lock_stage와 giveback_ratio를 계산한다. - TP 후 trailing stop을 packet에 포함한다. - value_damage_pct가 10 초과이면 다음 주 신규 위험 예산을 줄인다. - SELL 후보가 2개 이상이면 sell priority table을 먼저 렌더링한다. acceptance_criteria: - cash_recovery_value_damage_pct <= 10 target - profit_giveback_alert_count tracked - sell_priority_table rendered when candidates>=2 validation_commands: - python tools/build_profit_giveback_ratchet_v2.py --json GatherTradingData.json --out Temp/profit_giveback_ratchet_v2.json - python tools/build_value_preservation_scorer_v2.py - python tools/validate_operational_report_contract.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P3-04 priority: P3 title: live/replay 분리와 T+20 outcome ledger 운영 owner: architect objective: 리플레이 성과와 실전 성과를 절대 섞지 않는다. target_files: - tools/build_live_replay_separation_v3.py - tools/build_operational_t20_outcome_ledger_v1.py - tools/build_outcome_quality_score_v1.py - spec/44_live_replay_separation.yaml method_steps: - 모든 decision row에 sample_type=LIVE/REPLAY/PAPER를 붙인다. - T+5/T+20 결과를 outcome ledger에 누적한다. - sample_count<30이면 active 금지. - 리플레이 지표는 교육/참고 섹션에만 표시한다. acceptance_criteria: - replay_used_as_live_count == 0 - operational_t20_count tracked - live sample_count gating applied validation_commands: - python tools/build_live_replay_separation_v3.py --out Temp/live_replay_separation_v3.json - python tools/validate_no_replay_live_mix_v2.py --json Temp/live_replay_separation_v3.json --strict rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P3-05 priority: P3 title: 전략 하네스 점수 공식을 단순화 owner: architect objective: overall score보다 통제/성과/진실성/운영성을 분리한다. target_files: - spec/52_strategy_harness_scorecard.yaml - tools/build_strategy_hardening_harness_v2.py - tools/evaluate_strategy_harness_score.py method_steps: - control_score, performance_score, truth_score, ops_score 네 축으로 분리한다. - 성능 지표가 부족하면 overall을 높게 보이지 않게 cap을 건다. - 점수 산식과 thresholds를 YAML에 명시한다. - 보고서에는 높은 통제 점수와 낮은 성과 준비도를 분리해 표시한다. acceptance_criteria: - score_formula documented - sample_cap applied - overall_hardening_score not misleading - readiness_reasons displayed validation_commands: - python tools/evaluate_strategy_harness_score.py - python tools/build_strategy_hardening_harness_v2.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P4_RENDERER_AND_LLM_NO_HALLUCINATION objective: 보고서와 LLM이 계산하지 않고 하네스 packet만 복사하도록 완전히 잠근다. exit_gate: renderer_calculation_count=0, unprovenanced_number_count=0, llm regression PASS tasks: - task_id: P4-01 priority: P4 title: renderer copy-only helper로 축소 owner: architect objective: render_operational_report.py의 계산성 코드를 packet copy로 치환한다. target_files: - tools/render_operational_report.py - tools/operational_report_contract.py - schemas/operational_report.schema.json method_steps: - 계산처럼 보이는 사칙연산/비교/threshold 판단을 packet builder로 이동한다. - renderer에는 formatting, table order, null display만 둔다. - 숫자 포맷팅 함수는 provenance ledger pointer를 함께 받는다. - renderer_no_calculation validator를 release gate에 둔다. acceptance_criteria: - renderer_calculation_count == 0 - renderer_gate_redecision_count == 0 - operational report schema PASS validation_commands: - python tools/validate_renderer_no_calculation_v1.py - npm run validate-operational-report-contract rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P4-02 priority: P4 title: low-capability LLM regression fixture 확장 owner: architect objective: 저성능 LLM도 같은 결과를 내는지 golden prompt로 테스트한다. target_files: - tests/llm_regression/ - tools/run_low_capability_llm_regression_v1.py - prompts/low_capability_report_renderer.md method_steps: - BUY/HOLD/SELL/TRIM/blocked/data_missing/cadence 케이스를 fixture로 만든다. - 정답은 final_context_for_llm_v5의 필드 복사로만 구성한다. - LLM이 임의 숫자를 쓰면 FAIL. - 주말/1·11·21일 cadence 요구를 fixture에 포함한다. acceptance_criteria: - llm_regression_pass_rate == 100 - invented_number_count == 0 - harness_verdict_override_count == 0 validation_commands: - python tools/run_low_capability_llm_regression_v1.py --fixture tests/llm_regression --context Temp/final_context_for_llm_v5.yaml rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P4-03 priority: P4 title: DATA_MISSING 표준화 owner: architect objective: 결측을 추정하지 않고 하네스 업데이트 필요로만 표시한다. target_files: - spec/02_data_contract.yaml - spec/12_field_dictionary.yaml - tools/build_data_quality_reconciliation_v1.py - tools/validate_data_integrity_100_lock_v2.py method_steps: - 필드별 missing_policy를 field dictionary에 둔다. - 결측이 action-critical이면 execution block. - 결측이 narrative-only이면 DATA_MISSING 섹션에만 표시. - LLM prompt에 추정 금지 문구를 반복하지 말고 context pack contract로 강제한다. acceptance_criteria: - critical_missing_execution_blocked == true - imputed_data_exposure disclosed - DATA_MISSING wording exact validation_commands: - python tools/build_data_quality_reconciliation_v1.py --json GatherTradingData.json --integrity Temp/data_integrity_100_lock_v2.json --out Temp/data_quality_reconciliation_v1.json - python tools/validate_cash_ledger_v2.py --snapshot GatherTradingData.json --contract spec/15_account_snapshot_contract.yaml rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P5_OPERATING_CADENCE_AND_PORTFOLIO_POLICY objective: 사용자 운영 규칙을 엔진 하네스에 넣어 매번 사람이 기억하지 않아도 자동 출력되게 한다. exit_gate: weekly Sat/Sun rebalance and 1/11/21 mid-check sections generated by cadence signal tasks: - task_id: P5-01 priority: P5 title: 운영 cadence signal을 보고서 권위값으로 승격 owner: architect objective: 토/일 리밸런싱, 매월 1/11/21 중간점검을 자동화한다. target_files: - tools/build_operating_cadence_signal_v1.py - spec/18_settings_contract.yaml - tools/render_operational_report.py - schemas/operational_report.schema.json method_steps: - Asia/Seoul 기준 day_of_week/day_of_month를 계산한다. - 토/일이면 required_section.weekly_rebalance=true. - 1/11/21이면 required_section.mid_cycle_check=true. - 기본 투자 제안 단위는 weekly로 고정한다. acceptance_criteria: - weekend_rebalance_required true on Sat/Sun - mid_cycle_check_required true on day 1/11/21 - report section present when required validation_commands: - python tools/build_operating_cadence_signal_v1.py --timezone Asia/Seoul --out Temp/operating_cadence_signal_v1.json - python tools/validate_operational_report_contract.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P5-02 priority: P5 title: D+2 현금 방어선 계약 고정 owner: architect objective: D+2 정산현금을 즉시현금 방어선 충족으로 인정하는 사용자 정책을 단일화한다. target_files: - spec/00_execution_contract.yaml - spec/15_account_snapshot_contract.yaml - tools/validate_cash_ledger_v2.py - tools/build_goal_risk_budget_harness_v3.py method_steps: - cash ledger 용어를 immediate_cash_defense_eligible로 정리한다. - 일반계좌 D+2 정산현금은 cash floor 계산에 포함한다. - ISA/연금 현금은 제한현금으로 분리한다. - 보고서에는 eligible/restricted를 분리 표시한다. acceptance_criteria: - d2_cash_defense_rule_applied == true - cross_account_cash_leak_count == 0 - eligible_cash calculation provenance exists validation_commands: - python tools/validate_cash_ledger_v2.py --snapshot GatherTradingData.json --contract spec/15_account_snapshot_contract.yaml rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P5-03 priority: P5 title: 목표금액 5억 risk budget 연결 owner: architect objective: 목표 달성 압박이 risk rule을 우회하지 못하게 한다. target_files: - spec/36_goal_risk_budget_harness.yaml - tools/build_goal_risk_budget_harness_v3.py - tools/build_portfolio_alpha_confidence_per_ticker_v1.py method_steps: - 목표금액, 현재자산, 필요수익률, 허용 MDD를 산출하되 주문 판단은 risk gate 이후에만 반영한다. - 목표 부족분이 cash_floor/hard_stop/total_heat를 완화하지 못하게 한다. - 위험예산 초과 시 신규 매수보다 현금회복 우선. acceptance_criteria: - goal_pressure_override_count == 0 - risk_vs_strategy conflict resolved to risk - goal progress displayed separately validation_commands: - python tools/build_goal_risk_budget_harness_v3.py - python tools/validate_specs.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P6_RELEASE_DAG_CI_AND_OBSERVABILITY objective: 매번 같은 순서로 빌드·검증·패키징되고, 실패 원인이 바로 보이게 한다. exit_gate: release DAG deterministic, duplicate steps=0, anomaly history sufficient, engine health card PASS tasks: - task_id: P6-01 priority: P6 title: release DAG를 단일 엔트리포인트로 사용 owner: architect objective: package.json 여러 스크립트를 DAG 노드 호출로 정리한다. target_files: - spec/41_release_dag.yaml - tools/run_release_dag_v3.py - package.json method_steps: - ops:validate/ops:release/ops:package가 모두 run_release_dag_v3.py를 호출하게 한다. - 중복 스크립트명은 alias로만 유지한다. - prepare_zip 노드에서 --skip-validate 기본 사용을 금지한다. - DAG 노드별 inputs/outputs/depends_on을 모두 검증한다. acceptance_criteria: - duplicate_steps_removed_count == 0 - dag has no cycles - all strict nodes PASS - package scripts count does not increase validation_commands: - python tools/run_release_dag_v3.py --mode release --strict - npm run ops:release rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P6-02 priority: P6 title: engine health card를 첫 화면 지표로 owner: architect objective: 운영자가 한 장으로 상태를 판단하게 한다. target_files: - tools/build_engine_health_card_v1.py - schemas/engine_health_card.schema.json - tools/validate_engine_health_card_v1.py method_steps: - authority, data, formula coverage, performance readiness, release status, repo entropy를 한 JSON/YAML로 요약한다. - red/yellow/green 상태와 fail reason code를 제공한다. - 보고서 맨 위 portfolio health와 함께 출력한다. acceptance_criteria: - engine_health_card gate PASS - red reason code when release skipped - health card included in report validation_commands: - python tools/build_engine_health_card_v1.py --out Temp/engine_health_card_v1.json - python tools/validate_engine_health_card_v1.py --json Temp/engine_health_card_v1.json rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P6-03 priority: P6 title: runtime anomaly baseline 확장 owner: architect objective: 빌드 시간이 짧다고 정상으로 오인하지 않게 한다. target_files: - tools/profile_pipeline_runtime.py - tools/pipeline_runtime_anomaly_lib_v1.py - Temp/pipeline_runtime_profile_history_v1.json method_steps: - release/quick/package-only 모드별 baseline을 분리한다. - history window가 10 미만이면 INSUFFICIENT_HISTORY로 표시하되 gate 판단과 분리한다. - 검증 단계를 생략해 시간이 짧아진 경우 anomaly로 표시한다. acceptance_criteria: - baseline_window_size >= 10 or explicit insufficient label - validation_step_count tracked - skip_validate anomaly reason appears validation_commands: - python tools/profile_pipeline_runtime.py - python tools/validate_pipeline_runtime_contract.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - phase_id: P7_REPO_DIET_AND_MAINTENANCE_CADENCE objective: 문서/파일/버전 스프롤을 줄여 장기 확장 가능한 엔진으로 만든다. exit_gate: no stale runtime read, deprecated artifacts archived, source docs slim, TODO debt visible tasks: - task_id: P7-01 priority: P7 title: 버전 스프롤 정리 owner: architect objective: v1/v2/v3 산출물은 active 1개와 archive만 남긴다. target_files: - artifacts/canonical_manifest.yaml - tools/build_artifact_retirement_plan_v1.py - tools/clean_temp_artifacts_v1.py method_steps: - 개념별 canonical artifact 1개를 지정한다. - deprecated_files는 archive로 이동하고 runtime read 차단한다. - Temp에 남은 오래된 버전은 cleanup manifest를 통해 삭제한다. - 삭제 전 source_hash와 replacement를 기록한다. acceptance_criteria: - stale_artifact_count == 0 - deprecated_runtime_read_count == 0 - archive_runtime_read_count == 0 validation_commands: - python tools/build_artifact_retirement_plan_v1.py - python tools/clean_temp_artifacts_v1.py - python tools/validate_runtime_source_whitelist_v1.py --manifest runtime/active_artifact_manifest.yaml --scan src tools rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P7-02 priority: P7 title: 문서 다이어트 owner: architect objective: 길고 중복된 설명을 계약/ADR/런북으로 분리한다. target_files: - README.md - docs/doctrine.md - docs/runbook.md - prompts/*.md - AGENTS.md method_steps: - README는 사용법 50줄 내외로 둔다. - doctrine는 불변 원칙만 유지한다. - runbook은 명령 순서만 유지한다. - prompts는 렌더링 지시만 남기고 계산 설명 제거한다. - 중복 원칙은 spec/49로 이동한다. acceptance_criteria: - docs_lines_total <= target - AGENTS.md <= 120 lines - duplicate_rule_text_count == 0 validation_commands: - python tools/validate_agents_shrink_v1.py - python tools/lint_repo_hygiene.py rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed - task_id: P7-03 priority: P7 title: 주간 엔진 리뷰 템플릿 운영 owner: architect objective: 매주 알고리즘 추가보다 성능/부채 리뷰를 우선한다. target_files: - governance/weekly_engine_review_template.md - governance/change_request_template.yaml - governance/change_requests/*.yaml method_steps: - 매주 토/일 리밸런싱 후 engine health, failed gates, retired rules, new evidence를 기록한다. - 새 규칙 제안은 change_request로만 접수한다. - 1/11/21 중간점검에는 live outcome ledger와 목표금액 진행률을 점검한다. acceptance_criteria: - weekly review exists for each week - change requests validated - mid-cycle check sections generated validation_commands: - python tools/validate_change_requests_v1.py --dir governance/change_requests --strict rollback: git revert or restore last canonical artifact low_capability_llm_instruction: 목표 파일을 열고 method_steps를 순서대로 수행한다. 판단이 필요한 숫자는 만들지 말고 acceptance_criteria 기준으로만 PASS/FAIL을 적는다. status: completed release_gate_commands: minimum_local_sequence: - python tools/validate_specs.py - python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict - python tools/build_module_io_coverage_v1.py - python tools/validate_module_io_coverage_v1.py - python tools/validate_architecture_boundaries_v2.py - python tools/validate_renderer_no_calculation_v1.py - python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json --report Temp/operational_report.md - python tools/validate_low_capability_pack_v1.py --context Temp/final_context_for_llm_v5.yaml --contract spec/46_low_capability_execution_pack.yaml - python tools/validate_no_replay_live_mix_v2.py --json Temp/live_replay_separation_v3.json --strict - python tools/validate_cash_ledger_v2.py --snapshot GatherTradingData.json --contract spec/15_account_snapshot_contract.yaml - python tools/run_low_capability_llm_regression_v1.py --fixture tests/llm_regression --context Temp/final_context_for_llm_v5.yaml - python tools/run_release_dag_v3.py --mode release --strict - npm run ops:package hard_fail_conditions: - gate_status == SKIPPED in release mode - authority_collision_count > 0 - stale_artifact_count > 0 - unmapped_formula_count > 0 - renderer_calculation_count > 0 - reverse_dependency_count > 0 unless explicit unexpired allowlist exists - unprovenanced_number_count > 0 - replay_used_as_live_count > 0 - LLM invented number count > 0 - D+2 cash defense rule not applied - failed_checks not empty definition_of_done: control_and_truth: engine_harness_status: OK failed_checks_count: 0 formula_runtime_coverage_pct: 100.0 unmapped_formula_count: 0 report_active_artifact_match_pct: 100.0 authority_collision_count: 0 stale_artifact_count: 0 single_truth_conflict_count: 0 renderer_calculation_count: 0 reverse_dependency_count: 0 provenance_missing_count: 0 performance_readiness_targets: overall_hardening_score_min: 85.0 truth_hardening_score_min: 85.0 prediction_match_rate_pct_min: 60.0 algorithm_guidance_proof_min: 80.0 operational_t20_count_min: 30 operational_t20_pass_rate_min: 60.0 execution_expectancy_pct_min: 0.1 execution_win_rate_pct_min: 45.0 cash_recovery_value_damage_pct_max: 10.0 readiness_gate_allowed_for_active: - LIMITED_ACTIVE - ACTIVE repo_diet_targets: hard_total_file_count_max: 2000 target_packaged_file_count_max: 1600 hard_temp_json_count_max: 500 target_temp_json_count_max: 250 agents_md_max_lines: 120 manual_generated_edit_count: 0 implementation_sequence_for_next_commit: - 1. P0-01, P0-02, P0-03, P0-04만 먼저 수행한다. 새 알파 추가 금지. - 2. release DAG가 OK가 되면 P1 계약 파일을 추가한다. - 3. P2에서 GAS business logic 이전 계획을 만든 뒤 한 번에 하나씩 Python canonical로 이전한다. - 4. P3 성과 하네스를 통과하기 전까지 새 매수/매도 알고리즘은 SHADOW 상태로만 둔다. - 5. P4 LLM regression을 통과한 후 보고서 프롬프트를 줄인다. - 6. P5 운영 cadence와 D+2 현금정책을 보고서 필수섹션으로 고정한다. - 7. P6/P7은 매주 토/일 리밸런싱 리뷰 때 부채를 줄이는 반복 작업으로 운영한다.