schema_version: qedd_refactor_master_plan.v1
document_id: QEDD_REFACTOR_MASTER_TODO_20260610
language: ko-KR
generated_at_kst: '2026-06-10T17:10:00+09:00'
source_basis:
  zip: data_feed.zip
  zip_sha256: b06b08112a7e67b270db7dfa7888611212759e370694088607f23405de9df77a
  primary_authority_files_read:
  - AGENTS.md
  - docs/doctrine.md
  - governance/adr/0011-qedd-methodology.md
  - spec/49_refactor_methodology_contract.yaml
  - spec/41_release_dag.yaml
  - spec/34_architecture_boundaries.yaml
  - spec/39_gas_thin_adapter_policy.yaml
  - spec/43_quant_factor_taxonomy.yaml
  - spec/45_number_provenance_contract.yaml
  - spec/46_low_capability_execution_pack.yaml
  - spec/release/version_retirement_policy.yaml
  - spec/release/repository_entropy_budget.yaml
  - runtime/active_artifact_manifest.yaml
  - governance/authority_matrix.yaml
  non_negotiable_constraints:
  - 가격, 수량, TP, SL, 점수는 formula registry와 하네스 산출값만 사용한다.
  - LLM은 계산하지 않고 packet/context 값을 copy-only 렌더링한다.
  - Python canonical first, GAS thin adapter second 원칙을 유지한다.
  - Data -> Feature -> Decision -> Execution -> Report 단방향 경계를 유지한다.
  - D+2 현금은 즉시현금 방어선으로 인정한다.
  - 주말 리밸런싱과 매월 1/11/21 중간점검 cadence를 runtime contract에 고정한다.
  - deprecated artifact와 replay 표본은 active/live 판단 권위로 읽지 않는다.
current_repository_diagnosis:
  summary: 방향성은 이미 옳다. 문제는 공식/스키마/툴/문서의 버전 증가가 decision authority를 흐리게 만들 위험이 있다는
    점이다.
  repository_metrics_observed:
    total_zip_entries_observed: 1446
    entropy_audit_total_file_count: 1447
    package_script_count: 22
    temp_json_count: 17
    file_extension_counts:
      .md: 40
      .yaml: 174
      .py: 841
      .gs: 8
      .json: 376
      .jsonl: 2
    known_strengths:
    - active_artifact_manifest.yaml에서 active source를 1개로 수렴시키려는 구조가 존재한다.
    - ADR-0011 QEDD가 Contract-First, Python Canonical, No LLM Math 원칙을 명시한다.
    - authority_matrix.yaml 기준 authority_collision_count=0 구조를 이미 지향한다.
    - release DAG, provenance contract, low capability pack, GAS thin adapter policy가
      존재한다.
    primary_risks:
    - 버전 파일이 여러 곳에 공존하여 사람이 어떤 파일을 수정해야 하는지 흔들릴 수 있다.
    - tools/*.py에 빌드/검증/업그레이드 로직이 누적되면 canonical package와 CLI wrapper 경계가 다시 흐려진다.
    - factor_lifecycle_registry의 상당수 factor가 draft 상태에 머물면 실제 운용 판단에 기여하지 못하고 문서 부채가
      된다.
    - LLM 보고 프롬프트가 늘어나면 하네스 산출값과 narrative의 권위 충돌 가능성이 커진다.
    - Temp 산출물과 archive 산출물이 인간 검토 과정에서 active처럼 참조될 위험이 있다.
  cold_verdict: 새로운 문서를 더 늘리는 방식이 아니라, 권위 경로를 1개로 수렴시키고 모든 확장을 contract -> schema
    -> golden -> python -> shadow -> active 순서로만 승격시키는 운영체계가 필요하다.
target_methodology:
  name: 'QEDD-OS: Quant Evidence-Driven Deterministic Development Operating System'
  objective: 저성능 LLM도 동일한 final_decision_packet을 읽으면 고성능 LLM과 같은 결론을 내도록 만드는 결정론적
    퀀트 엔진 개발/운영 방법론
  core_doctrine:
  - YAML은 계약이다. Python은 계산이다. GAS는 어댑터다. Markdown은 설명이다. LLM은 렌더러다.
  - 신규 아이디어는 바로 매수/매도 로직이 아니라 shadow factor로 시작한다.
  - 모든 숫자는 source_path, json_pointer, formula_id, input_hash, freshness_status를 가져야
    한다.
  - 성능이 검증되지 않은 팩터는 active decision에 영향을 주지 않는다.
  - 매수/매도 추천은 alpha보다 먼저 손실제한, 현금방어선, 실행가능성, 데이터정합성을 통과해야 한다.
  authority_ladder:
  - rank: 1
    authority: spec/*.yaml
    meaning: 계약, 공식, 게이트, 출력 스키마의 원본 권위
  - rank: 2
    authority: runtime/active_artifact_manifest.yaml
    meaning: 현재 active 산출물 alias와 단일 권위 경로
  - rank: 3
    authority: Temp/final_decision_packet_active.json
    meaning: 운영 보고서가 복사해야 하는 최종 패킷
  - rank: 4
    authority: src/quant_engine
    meaning: 계산 구현의 canonical package
  - rank: 5
    authority: tools/*.py
    meaning: 검증/생성 CLI wrapper. 핵심 판단 로직 금지
  - rank: 6
    authority: gas_*.gs
    meaning: collect/normalize/export/display 전용 thin adapter
  - rank: 7
    authority: prompts/*.md
    meaning: copy-only rendering instruction. 계산/순위/수량 산출 금지
  development_flow:
  - 'CR 생성: change_request_template.yaml로 문제, 기대효과, 영향 범위, rollback 조건을 먼저 쓴다.'
  - '계약 작성: spec/*.yaml에 input/output/schema/formula/gate/owner/retirement_condition을
    등록한다.'
  - '스키마 작성: schemas/*.schema.json 또는 generated schema를 갱신한다.'
  - '골든케이스 작성: buy/sell/hold/reject/insufficient_data/avoid 케이스와 경계값 케이스를 먼저 만든다.'
  - 'Python 구현: src/quant_engine에 순수 함수로 구현하고 tools는 CLI wrapper만 둔다.'
  - 'Property invariant 검증: 결측/위험/현금부족/가격 stale 조건에서 권한이 완화되지 않는지 검증한다.'
  - 'Shadow 실행: active decision에 반영하지 않고 shadow ledger에 예측과 실제 결과를 누적한다.'
  - 'Promotion gate: 표본 수, 예측개선, drawdown, 충돌률, provenance 100%를 만족할 때만 active 승격한다.'
  - 'Release DAG PASS: full gate에서 SKIP/FAIL 없이 통과한 경우만 운영 패키지에 포함한다.'
  - 'Post-release review: 주간 리밸런싱과 1/11/21 중간점검 때 drift, 충돌, 성과를 평가한다.'
proposed_repository_operating_model:
  directory_contract:
    AGENTS.md: 150~220줄 이하의 운영 인덱스. 상세 정책을 직접 길게 쓰지 않는다.
    spec/: source of truth. 계약/공식/팩터/리스크/출력/릴리즈 정책만 둔다.
    src/quant_engine/: canonical Python package. 모든 계산과 decision logic은 여기로 수렴한다.
    tools/: thin CLI. build/validate/render/package 명령만 둔다. 비즈니스 로직은 import해서 호출한다.
    gas_*.gs: Google Sheets/Apps Script adapter. decision/sizing/stop/take_profit/risk_score
      금지.
    governance/: ADR, authority matrix, rule lifecycle, change request, rule hash만
      둔다.
    schemas/: JSON schema와 generated schema. model parity 검증 대상이다.
    tests/golden/: 골든케이스, replay fixture, property/metamorphic fixture.
    Temp/: 런타임 산출물. 직접 편집 금지. active manifest를 통해서만 읽는다.
    artifacts/archive/: 명시적 보관소. runtime source로 읽지 않는다.
    prompts/: copy-only renderer instruction. 계산/판단 로직 금지.
    docs/: 사용자 설명과 ADR 해설. 중복 정책 원본 금지.
  file_diet_policy:
    principle: 문서는 줄이고 계약은 남긴다. 중복 설명은 삭제하고 링크 인덱스로 수렴한다.
    targets:
      max_active_versions_per_formula: 1
      max_shadow_versions_per_formula: 1
      auto_archive_when_versions_gte: 3
      AGENTS_md_max_lines: 220
      prompt_files_max_role: renderer only
      tools_business_logic_count: 0
      runtime_source_from_archive_count: 0
    actions:
    - versioned tool 파일은 latest alias 1개와 archive 디렉토리로 분리한다.
    - prompts 중 engine_audit_master_prompt_v2/v3 같은 중복 버전은 manifest로 active 1개만 노출한다.
    - spec/strategy/*_vN.yaml은 lifecycle registry에 ACTIVE/SHADOW/RETIRED를 반드시 부여한다.
    - Temp와 artifacts/canonical에 동일 내용이 있으면 active manifest alias만 남기고 사람이 직접 경로를
      인용하지 못하게 한다.
    - 문서의 정책 문장은 spec/governance로 이동하고 docs는 해설과 운영 예시만 유지한다.
  version_retirement_rules:
  - ACTIVE는 항상 1개다.
  - SHADOW는 다음 후보 1개만 허용한다.
  - RETIRED는 archive로 이동하고 runtime manifest에서 참조 금지한다.
  - generated parity 보존이 필요한 schema/model/formula generated 파일만 예외로 둔다.
  - 새 버전 생성 시 previous version의 retirement_condition과 migration note를 필수 기록한다.
quant_engine_design:
  module_pipeline:
  - stage: data
    owner: data_engineer
    input: external/source workbook/API
    output: GatherTradingData.json
    hard_gate: schema_presence_score=100 and freshness valid
  - stage: feature
    owner: quant_researcher
    input: GatherTradingData.json
    output: Temp/computed_harness_v1.json
    hard_gate: all registered formula inputs mapped or DATA_MISSING
  - stage: decision
    owner: quant_architect
    input: computed_harness + contracts
    output: Temp/final_decision_packet_active.json
    hard_gate: no authority collision, no stale active artifact
  - stage: execution
    owner: risk_manager
    input: final decision packet
    output: order table / sell priority table / waterfall
    hard_gate: risk/cash/exposure/order grammar pass
  - stage: report
    owner: pm
    input: final packet + provenance ledger
    output: operational_report.json/md
    hard_gate: copy-only numeric sync and provenance 100%
  factor_families_to_standardize:
  - family: market_regime
    purpose: 시장 위험이 커질 때 신규 매수/포지션 스케일을 자동 축소
    required_tests:
    - risk monotonicity
    - stale macro data block
    - cash floor interaction
    promotion_evidence:
    - live sample >= 30
    - replay/live separation pass
    - position scale never increases when risk rises
  - family: smart_money_liquidity
    purpose: 외국인/기관/거래대금/유동성 가속을 이용한 선행성 확인
    required_tests:
    - lookahead bias zero
    - liquidity slippage cap
    - distribution divergence detection
    promotion_evidence:
    - entry timing improvement
    - false breakout reduction
    - sell-before-distribution hit rate
  - family: fundamental_quality
    purpose: 단기 테마와 장기 생존력을 분리하여 core/satellite 배분
    required_tests:
    - data freshness
    - sector-neutral comparison
    - earnings/cashflow quality consistency
    promotion_evidence:
    - drawdown adjusted return improvement
    - low-quality exclusion effectiveness
  - family: entry_timing
    purpose: 추격매수/늦은 진입/설거지 방지
    required_tests:
    - anti-late-entry gate
    - pullback quality gate
    - entry decile stability
    promotion_evidence:
    - late entry loss rate reduction
    - stop hit within T+5 reduction
  - family: exit_value_preservation
    purpose: 수익금을 지키기 위한 단계익절, 트레일링스탑, 현금회복 최적화
    required_tests:
    - sell priority linearization
    - waterfall single responsibility
    - profit lock monotonicity
    promotion_evidence:
    - realized gain protection
    - drawdown after profit reduction
    - cash shortfall recovery
  - family: portfolio_risk_budget
    purpose: 목표 5억 원 도달을 위한 현금/섹터/종목/스타일 리스크 예산 관리
    required_tests:
    - position heat cap
    - sector concentration cap
    - D+2 cash defense recognition
    promotion_evidence:
    - cash floor breach zero
    - portfolio beta/heat within cap
    - goal risk budget traceability
  - family: execution_quality
    purpose: 호가/틱/수량/슬리피지/주문문법을 deterministic하게 고정
    required_tests:
    - tick normalization
    - order grammar
    - quantity integer
    - stale price zero quantity
    promotion_evidence:
    - order rejection rate reduction
    - numeric mismatch zero
  algorithm_expansion_rule:
    before_adding_any_factor:
    - factor_id를 spec/factor_lifecycle_registry.yaml에 등록한다.
    - hypothesis, horizon, decay_half_life, input_fields, expected_edge_formula를 쓴다.
    - market_regime_applicability와 conflict_precedence를 쓴다.
    - position_sizing_impact와 exit_impact를 diagnostic/scale/gate/block 중 하나로 명시한다.
    - golden_cases와 property invariant를 먼저 만든다.
    - 최소 30개 live 표본 전에는 active decision 영향도를 0으로 둔다.
    - no_edge_improvement_lookback_days=90 또는 high_conflict이면 retire한다.
    forbidden_shortcuts:
    - 성과가 좋아 보인다는 이유만으로 shadow를 건너뛰고 active 승격 금지
    - LLM narrative로 buy/sell gate 완화 금지
    - replay 성과를 live 성과처럼 표현 금지
    - 미등록 공식으로 포지션 사이징 금지
    - 다중 조건 주문문으로 매도 우선순위 뒤섞기 금지
harness_architecture:
  harness_stack:
  - layer: contract_validation
    purpose: YAML/spec/schema shape 검증
    must_pass:
    - validate_specs
    - validate_schema_model
    - validate_field_dictionary
  - layer: golden_case_validation
    purpose: 정답이 알려진 buy/sell/hold/reject/avoid/insufficient_data 재현
    must_pass:
    - validate_golden_coverage_100
  - layer: property_invariant_validation
    purpose: 시장위험/현금부족/결측/stale 가격 증가 시 권한이 완화되지 않는지 검증
    must_pass:
    - property_invariants
  - layer: architecture_boundary_validation
    purpose: renderer 계산, GAS business logic, reverse dependency 차단
    must_pass:
    - validate_gas_thin_adapter
    - architecture_boundary_zero
  - layer: provenance_validation
    purpose: 보고서 숫자 100% provenance 보장
    must_pass:
    - validate_number_provenance_strict
  - layer: active_manifest_validation
    purpose: runtime source가 active alias 1개로 수렴하는지 검증
    must_pass:
    - validate_active_manifest
    - validate_runtime_source_whitelist
  - layer: shadow_live_validation
    purpose: replay/shadow/live 혼입 차단
    must_pass:
    - validate_no_replay_live_mix
    - live_sample_qualification
  - layer: low_capability_llm_validation
    purpose: 저성능 LLM도 packet copy-only로 같은 결과를 내는지 검증
    must_pass:
    - validate_low_capability_pack
    - numeric_copy_only_sync
  universal_release_gates:
    active_artifact_match_pct: 100.0
    number_provenance_coverage_pct: 100.0
    formula_owner_coverage_pct: 100.0
    golden_coverage_pct: 100.0
    authority_collision_count: 0
    manual_override_field_count: 0
    renderer_calculation_count: 0
    reverse_dependency_count: 0
    gas_forbidden_responsibility_count: 0
    runtime_source_from_deprecated_artifact_count: 0
    llm_numeric_generation_count: 0
    release_failed_checks_count: 0
    strict_mode_skip_count: 0
  new_harnesses_to_add:
  - id: H001_DECISION_TRACE_REPLAY
    file: tools/validate_decision_trace_replay_v1.py
    contract: spec/52_decision_trace_replay_contract.yaml
    purpose: 최종 매수/보유/매도 결론까지 사용된 모든 gate와 feature를 trace로 복원
    acceptance:
    - every final verdict has ordered gate_trace
    - missing gate_trace blocks release
  - id: H002_FACTOR_CONFLICT_MATRIX
    file: tools/validate_factor_conflict_matrix_v1.py
    contract: spec/53_factor_conflict_matrix.yaml
    purpose: 스마트머니/펀더멘털/모멘텀/리스크 팩터 충돌 시 우선순위 자동 판정
    acceptance:
    - conflict_precedence defined for every active factor
    - unresolved conflict count = 0
  - id: H003_ANTI_BACKFILL_LOOKAHEAD
    file: tools/validate_no_lookahead_bias_v1.py
    contract: spec/54_temporal_data_integrity.yaml
    purpose: 백필 데이터와 실시간 데이터의 timestamp/freshness 혼입 차단
    acceptance:
    - feature_timestamp <= decision_timestamp
    - backfilled_after_decision_count = 0
  - id: H004_EXECUTION_SIMULATOR
    file: tools/validate_execution_simulator_v1.py
    contract: spec/55_execution_simulator_contract.yaml
    purpose: 틱 정규화, 최소주문수량, 예수금, D+2 현금, 슬리피지 적용 후 실제 주문 가능성 검증
    acceptance:
    - invalid_order_count = 0
    - cash_floor_after_orders >= required_cash_floor
  - id: H005_REPORT_RENDER_DIFF
    file: tools/validate_report_render_diff_v1.py
    contract: spec/56_renderer_copy_only_contract.yaml
    purpose: operational_report.md/json의 숫자가 final packet과 1:1 복사인지 검증
    acceptance:
    - numeric_diff_count = 0
    - unsupported_narrative_softening_count = 0
  - id: H006_ENTROPY_BUDGET_ENFORCER
    file: tools/validate_repository_entropy_budget_v3.py
    contract: spec/release/repository_entropy_budget.yaml
    purpose: 파일 수만 보지 않고 active duplicate, version sprawl, docs policy duplication까지
      측정
    acceptance:
    - active_duplicate_count = 0
    - stale_version_exposed_count = 0
    - policy_duplicate_count <= approved_budget
  - id: H007_SHADOW_PROMOTION_SCORECARD
    file: tools/build_shadow_promotion_scorecard_v1.py
    contract: spec/57_shadow_promotion_scorecard.yaml
    purpose: 신규 팩터를 active로 올릴지 수치로 판단
    acceptance:
    - live_sample_count >= 30
    - edge_improvement_positive
    - drawdown_not_worse
    - conflict_rate_within_cap
  - id: H008_LLM_DETERMINISM_AUDIT
    file: tools/validate_llm_determinism_pack_v1.py
    contract: spec/58_llm_determinism_contract.yaml
    purpose: 저성능 LLM용 pack이 계산 없이 동일 결론을 렌더링할 만큼 충분한지 검증
    acceptance:
    - all decision fields precomputed
    - all tables sorted in packet
    - no instruction requires arithmetic
low_capability_llm_execution_protocol:
  principle: LLM에게 생각을 시키지 말고, 이미 계산된 값을 올바른 순서로 복사하게 만든다.
  required_context_pack_order:
  - 01_metadata_and_manifest_alias
  - 02_portfolio_health
  - 03_hard_blockers
  - 04_sell_priority_table
  - 05_buy_hold_sell_action_table
  - 06_cash_and_risk_budget
  - 07_shadow_ledger_visible_items
  - 08_data_missing_items
  - 09_market_regime_summary_precomputed
  - 10_education_notes_preapproved
  - 11_forbidden_phrases_and_no_math_rules
  renderer_rules:
  - 표 정렬은 packet에서 이미 끝난 순서를 유지한다.
  - 수량/가격/비중/점수/순위/평균/합계 계산을 하지 않는다.
  - 값이 없으면 DATA_MISSING — 하네스 업데이트 필요로 표기한다.
  - blocked/limited 종목도 산출된 기준가, 손절가, 익절가, 수량을 숨기지 않는다.
  - 투자 결론은 final_execution_decision과 gate_trace를 번복하지 않는다.
  - 매도 후보가 2개 이상이면 sell priority table을 먼저 출력한다.
  - narrative는 gate를 완화하거나 회피하는 표현을 쓰지 않는다.
  minimum_packet_fields:
  - ticker
  - name
  - position_class
  - final_action
  - action_reason_code
  - entry_price
  - stop_price
  - take_profit_ladder
  - proposed_quantity
  - sell_priority_rank
  - cash_impact_krw
  - risk_budget_impact
  - data_freshness_status
  - formula_id
  - source_path
  - json_pointer
  - input_hash
refactor_todo_master:
- phase: P0_freeze_and_baseline
  goal: 현재 상태를 손대기 전에 재현 가능한 기준선을 잠근다.
  tasks:
  - id: P0-T01
    action: 현재 data_feed.zip의 sha256과 file count를 runtime/refactor_baseline_v2.yaml에
      기록한다.
    files:
    - runtime/refactor_baseline_v2.yaml
    commands:
    - python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v2.yaml
    done_when:
    - total_file_count recorded
    - package_script_count recorded
    - temp_json_count recorded
    status: completed
  - id: P0-T02
    action: active_artifact_manifest.yaml의 canonical_source와 active_aliases를 검증한다.
    files:
    - runtime/active_artifact_manifest.yaml
    commands:
    - python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml
      --strict
    done_when:
    - authority_collision_count == 0
    - single_truth_conflict_count == 0
    status: completed
  - id: P0-T03
    action: release DAG를 strict mode로 실행해 실패/스킵 목록을 baseline으로 저장한다.
    files:
    - Temp/engine_harness_gate_result.json
    commands:
    - npm run validate-engine-strict
    done_when:
    - gate result exists
    - failed_checks list captured
    status: completed
  - id: P0-T04
    action: 변경 전 operational_report.json과 final_decision_packet_active.json의 numeric
      sync 상태를 저장한다.
    files:
    - Temp/operational_report.json
    - Temp/final_decision_packet_active.json
    commands:
    - python tools/validate_report_packet_sync_v1.py --packet Temp/final_decision_packet_active.json
      --report Temp/operational_report.json
    done_when:
    - numeric mismatch count captured
    status: completed
- phase: P1_authority_collapse
  goal: 사람과 LLM이 읽는 권위 경로를 하나로 수렴시킨다.
  tasks:
  - id: P1-T01
    action: AGENTS.md를 운영 인덱스로만 유지하고 상세 규칙은 governance/rules 및 spec으로 이동한다.
    files:
    - AGENTS.md
    - governance/rules/*.yaml
    - spec/*.yaml
    acceptance:
    - AGENTS.md <= 220 lines
    - all critical authority files listed
    - no duplicate formula definitions in AGENTS.md
    status: completed
  - id: P1-T02
    action: spec/aliases.yaml에 legacy path -> canonical path alias를 명시하고 deprecated
      path 직접 참조를 차단한다.
    files:
    - spec/aliases.yaml
    - tools/validate_runtime_source_whitelist_v1.py
    acceptance:
    - deprecated direct reference count = 0
    status: completed
  - id: P1-T03
    action: runtime/active_artifact_manifest.yaml만 Temp active artifact의 진입점으로 허용한다.
    files:
    - runtime/active_artifact_manifest.yaml
    - spec/32_canonical_artifact_resolver.yaml
    acceptance:
    - runtime source whitelist pass
    status: completed
  - id: P1-T04
    action: authority_matrix.yaml에 모든 output field owner를 100% 등록한다.
    files:
    - governance/authority_matrix.yaml
    - spec/03_formulas/output_field_owner_ledger.yaml
    acceptance:
    - owned_output_field_pct == 100.0
    - manual_override_field_count == 0
    status: completed
- phase: P2_contract_first_normalization
  goal: 공식/팩터/출력 필드를 계약 우선 구조로 표준화한다.
  tasks:
  - id: P2-T01
    action: spec/13_formula_registry.yaml과 spec/03_formulas/formula_registry.normalized.yaml의
      차이를 비교해 canonical registry를 하나로 정한다.
    files:
    - spec/13_formula_registry.yaml
    - spec/03_formulas/formula_registry.normalized.yaml
    acceptance:
    - one canonical formula registry declared
    - duplicate formula_id count = 0
    status: completed
  - id: P2-T02
    action: 모든 formula_id에 owner, input_fields, output_fields, unit, freshness, golden_cases,
      lifecycle_state를 채운다.
    files:
    - spec/13_formula_registry.yaml
    - spec/51_formula_lifecycle_registry.yaml
    acceptance:
    - formula_owner_coverage_pct == 100.0
    - formula_lifecycle_missing_count == 0
    status: completed
  - id: P2-T03
    action: factor_lifecycle_registry의 draft factor를 active_candidate, shadow, retired
      중 하나로 재분류한다.
    files:
    - spec/factor_lifecycle_registry.yaml
    acceptance:
    - factor without owner = 0
    - factor without conflict_precedence = 0
    - factor without retirement_condition = 0
    status: completed
  - id: P2-T04
    action: field_dictionary를 account_snapshot/raw workbook/report output과 1:1 매핑한다.
    files:
    - spec/12_field_dictionary.yaml
    - spec/14_raw_workbook_mapping.yaml
    - spec/15_account_snapshot_contract.yaml
    acceptance:
    - unmapped required field count = 0
    status: completed
- phase: P3_python_canonical_extraction
  goal: 계산 로직을 src/quant_engine으로 수렴시키고 tools는 얇게 만든다.
  tasks:
  - id: P3-T01
    action: tools/build_* 내부 비즈니스 계산을 찾아 src/quant_engine/{features,decision,risk,execution}로
      이동한다.
    files:
    - tools/*.py
    - src/quant_engine/**
    acceptance:
    - tools business logic function count = 0
    - tools only parse args/call package/write artifact
    status: completed
  - id: P3-T02
    action: src/quant_engine에 domain별 pure function interface를 만든다.
    files:
    - src/quant_engine/features
    - src/quant_engine/decision
    - src/quant_engine/risk
    - src/quant_engine/execution
    acceptance:
    - no filesystem access in pure formula functions
    - all side effects in adapter layer
    status: completed
  - id: P3-T03
    action: generated formula/model/schema parity를 단일 generator로 만든다.
    files:
    - tools/generate_schema_models.py
    - schemas/generated
    - src/quant_engine/models/generated
    acceptance:
    - schema/model parity pass
    - duplicate generated hash is expected and documented
    status: completed
  - id: P3-T04
    action: run_release_dag_v1/v2/v3를 run_release_dag.py + versioned contract로 정리한다.
    files:
    - tools/run_release_dag.py
    - spec/41_release_dag.yaml
    acceptance:
    - package scripts reference only current CLI
    - old versions retired or archived
    status: completed
- phase: P4_gas_thin_adapter_enforcement
  goal: GAS에서 의사결정/사이징/손절/익절/리스크 계산을 제거한다.
  tasks:
  - id: P4-T01
    action: gas_*.gs 함수를 collect/normalize/export/display/business_logic으로 분류한다.
    files:
    - gas_*.gs
    - Temp/gas_business_logic_audit_v1.json
    commands:
    - python tools/validate_gas_thin_adapter_v1.py
    acceptance:
    - forbidden responsibility count captured
    status: completed
  - id: P4-T02
    action: business_logic 함수는 Python canonical 출력값을 읽는 adapter 호출로 치환한다.
    files:
    - gas_*.gs
    - src/quant_engine/**
    acceptance:
    - decision/sizing/stop_loss/take_profit/risk_score in GAS = 0
    status: completed
  - id: P4-T03
    action: GAS 함수 호출 인자 수와 exported context key를 검증한다.
    files:
    - tools/validate_gas_call_arity.py
    - gas_*.gs
    commands:
    - npm run validate-gas-call-arity
    acceptance:
    - call arity mismatch count = 0
    status: completed
- phase: P5_harness_completion
  goal: 모든 알고리즘 확장이 수치 증거 없이는 active가 될 수 없게 만든다.
  tasks:
  - id: P5-T01
    action: new_harnesses_to_add H001~H008 계약 파일을 spec/52~58로 추가한다.
    files:
    - spec/52_decision_trace_replay_contract.yaml
    - spec/53_factor_conflict_matrix.yaml
    - spec/54_temporal_data_integrity.yaml
    - spec/55_execution_simulator_contract.yaml
    - spec/56_renderer_copy_only_contract.yaml
    - spec/57_shadow_promotion_scorecard.yaml
    - spec/58_llm_determinism_contract.yaml
    acceptance:
    - all new contracts validate
    status: completed
  - id: P5-T02
    action: property_invariants.yaml을 실제 validator와 연결한다.
    files:
    - spec/property_invariants.yaml
    - tools/validate_property_invariants_v1.py
    acceptance:
    - all invariants executable
    - violation blocks release
    status: completed
  - id: P5-T03
    action: live/replay/shadow 분리를 formula/factor promotion gate의 필수조건으로 만든다.
    files:
    - spec/44_live_replay_separation.yaml
    - tools/validate_no_replay_live_mix_v2.py
    acceptance:
    - replay metric cannot unlock active
    - live sample < 30 blocks PASS_100
    status: completed
  - id: P5-T04
    action: backtest/replay 결과에는 latency, slippage, 거래비용, survivorship bias flag를
      필수로 붙인다.
    files:
    - spec/29_backtest_harness_contract.yaml
    acceptance:
    - unadjusted replay performance cannot promote factor
    status: completed
- phase: P6_low_capability_llm_pack
  goal: LLM 성능과 관계없이 동일한 보고서 결론이 나오도록 packet을 완성한다.
  tasks:
  - id: P6-T01
    action: Temp/final_context_for_llm_v5.yaml에 모든 정렬/순위/표시 문자열을 사전 계산해서 넣는다.
    files:
    - Temp/final_context_for_llm_v5.yaml
    - spec/46_low_capability_execution_pack.yaml
    acceptance:
    - all required_sections present
    - no arithmetic instruction required
    status: completed
  - id: P6-T02
    action: 프롬프트에서 계산/평균/순위/재해석 지시를 삭제하고 copy-only template으로 축소한다.
    files:
    - prompts/low_capability_report_renderer.md
    - prompts/report_renderer_prompt.md
    acceptance:
    - llm_numeric_generation_count = 0
    status: completed
  - id: P6-T03
    action: operational_report.md/json의 모든 숫자를 provenance ledger와 대조한다.
    files:
    - Temp/number_provenance_ledger_v4.json
    - Temp/operational_report.md
    - Temp/operational_report.json
    commands:
    - python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json
      --report Temp/operational_report.md
    acceptance:
    - number_provenance_coverage_pct == 100.0
    status: completed
- phase: P7_file_diet_and_entropy_control
  goal: 지나치게 많은 문서/버전/도구를 줄이고 장기 유지보수성을 확보한다.
  tasks:
  - id: P7-T01
    action: 동일 basename의 v1/v2/v3 파일 그룹을 inventory로 뽑아 ACTIVE/SHADOW/RETIRED를 지정한다.
    files:
    - runtime/refactor_version_inventory_v1.yaml
    acceptance:
    - unclassified version group count = 0
    status: completed
  - id: P7-T02
    action: 활성 prompt는 renderer 1개, audit 1개, capture parse 1개로 제한한다.
    files:
    - prompts/*.md
    - runtime/active_artifact_manifest.yaml
    acceptance:
    - active prompt count by role <= 1
    status: completed
  - id: P7-T03
    action: archive에 있는 artifact는 runtime resolver가 직접 읽지 못하게 whitelist validator를
      강화한다.
    files:
    - tools/validate_runtime_source_whitelist_v1.py
    acceptance:
    - runtime source from artifacts/archive count = 0
    status: completed
  - id: P7-T04
    action: README/docs는 운영 명령과 의사결정 이론 설명만 남기고 정책 원본은 spec/governance로 링크한다.
    files:
    - README.md
    - docs/*.md
    acceptance:
    - policy duplicate sections removed
    - doc links resolve
    status: completed
- phase: P8_release_train_and_operating_cadence
  goal: 매주/월중 점검과 릴리즈 관리를 자동화된 의식으로 만든다.
  tasks:
  - id: P8-T01
    action: spec/operating_cadence.yaml에 weekend rebalance와 1/11/21 mid-check를 release
      DAG input으로 연결한다.
    files:
    - spec/operating_cadence.yaml
    - tools/run_release_dag.py
    acceptance:
    - rebalance_required and mid_check_required computed in packet
    status: completed
  - id: P8-T02
    action: 매주 리밸런싱 전용 checklist를 final_context_for_llm에 포함한다.
    files:
    - spec/46_low_capability_execution_pack.yaml
    - Temp/final_context_for_llm_v5.yaml
    acceptance:
    - weekend rebalance section present when required
    status: completed
  - id: P8-T03
    action: 대형 IPO/시장상관/차익실현 사전 판단은 event_response/proactive_exit_radar로만 산출한다.
    files:
    - spec/exit/event_response.yaml
    - spec/exit/proactive_exit_radar.yaml
    acceptance:
    - IPO event does not bypass sell priority waterfall
    status: completed
- phase: P9_performance_governance
  goal: 엔진이 수익률만 올리는 것이 아니라 수익금을 지키는지 평가한다.
  tasks:
  - id: P9-T01
    action: 성과 평가는 gross return이 아니라 net return, max drawdown, hit rate, late-entry
      loss rate, profit giveback으로 분해한다.
    files:
    - spec/17_performance_contract.yaml
    - spec/37_evaluation_dashboard_contract.yaml
    acceptance:
    - performance dashboard has net and risk-adjusted metrics
    status: completed
  - id: P9-T02
    action: 신규 팩터의 승격은 prediction_match_rate보다 drawdown 개선과 false-positive 감소를 더 우선한다.
    files:
    - spec/57_shadow_promotion_scorecard.yaml
    acceptance:
    - promotion scorecard includes drawdown_not_worse and false_positive_reduction
    status: completed
  - id: P9-T03
    action: 목표금액 5억 기준 risk budget drift와 cash defense drift를 매 release에 기록한다.
    files:
    - spec/36_goal_risk_budget_harness.yaml
    acceptance:
    - goal risk budget trace exists in final packet
    status: completed
command_playbook:
  baseline:
  - python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v2.yaml
  - python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml
    --strict
  - npm run validate-engine-strict
  daily_engine_gate:
  - npm run convert-data-json
  - npm run validate-proposal-reference:strict
  - npm run full-gate:proposal-strict
  release_gate:
  - npm run full-gate
  - npm run validate-engine-strict
  - npm run prepare-upload-zip -- --validation-mode release --profile
  after_gas_change:
  - npm run validate-gas-call-arity
  - python tools/validate_gas_thin_adapter_v1.py
  - npm run full-gate:proposal-strict
  after_formula_change:
  - 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
  - npm run validate-engine-strict
  after_prompt_or_report_change:
  - python tools/render_operational_report.py --json GatherTradingData.json --output
    Temp/operational_report.md --report-json-output Temp/operational_report.json
  - python tools/validate_operational_report_contract.py
  - python tools/validate_report_packet_sync_v1.py --packet Temp/final_decision_packet_active.json
    --report Temp/operational_report.json
  - python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json
    --report Temp/operational_report.md
definition_of_done:
  refactor_release_done_when:
  - Release DAG strict mode PASS
  - strict mode SKIP count = 0
  - authority_collision_count = 0
  - single_truth_conflict_count = 0
  - active_artifact_match_pct = 100.0
  - number_provenance_coverage_pct = 100.0
  - golden_coverage_pct = 100.0
  - schema/model parity PASS
  - GAS forbidden responsibility count = 0
  - tools business logic count = 0
  - LLM numeric generation count = 0
  - runtime source from archive/deprecated artifact count = 0
  - new active factor has shadow scorecard and live_sample_count >= 30
  - all report numbers resolve to source_path/json_pointer/formula_id/input_hash/freshness_status
  human_review_checklist:
  - 이 변경이 투자 판단을 바꾸는가? 바꾼다면 formula/factor lifecycle과 shadow evidence가 있는가?
  - 이 변경이 보고 표현만 바꾸는가? 그렇다면 숫자 provenance와 copy-only sync가 유지되는가?
  - 이 변경이 데이터 수집만 바꾸는가? 그렇다면 freshness와 raw workbook mapping이 깨지지 않았는가?
  - 이 변경이 GAS에 계산을 되살리는가? 하나라도 그렇다면 반려한다.
  - 이 변경이 문서를 늘리는가? 기존 spec/governance로 흡수할 수 있으면 새 문서를 만들지 않는다.
recommended_next_7_days:
- day: D1
  focus: P0 baseline + P1 authority collapse
  deliverables:
  - refactor_baseline_v2.yaml
  - AGENTS.md shrink plan
  - alias/deprecated reference audit
- day: D2
  focus: P2 formula/factor lifecycle normalization
  deliverables:
  - formula lifecycle missing list
  - factor draft/shadow/retired classification
- day: D3
  focus: P3 tools business logic extraction inventory
  deliverables:
  - tools_logic_inventory.yaml
  - src/quant_engine module map
- day: D4
  focus: P4 GAS thin adapter audit
  deliverables:
  - gas_business_logic_audit_v1.json
  - migration patches
- day: D5
  focus: P5 new harness contracts H001-H008
  deliverables:
  - spec/52~58 contract drafts
  - release DAG node additions
- day: D6
  focus: P6 low capability LLM pack
  deliverables:
  - final_context_for_llm_v6.yaml
  - copy-only renderer prompt
- day: D7
  focus: P7 entropy diet + full gate
  deliverables:
  - version inventory
  - archive manifest
  - strict release PASS report
senior_architect_final_rule: 좋은 퀀트 엔진은 더 많은 규칙을 가진 엔진이 아니라, 손실을 막는 규칙과 수익을 키우는 규칙의
  권위가 충돌하지 않는 엔진이다. 확장은 반드시 shadow evidence로 하고, 운영은 반드시 active manifest 하나로 한다.
