Files
QuantEngineByItz/suggest/quant_engine_refactor_methodology_todo_20260607.yaml
T

897 lines
49 KiB
YAML

schema_version: quant_engine_structural_refactor_methodology_todo.v1.2026-06-07
language: ko-KR
document_type: contract_first_deterministic_quant_engine_refactor_todo
generated_at_kst: '2026-06-07T00:00:00+09:00'
download_filename: quant_engine_refactor_methodology_todo_20260607.yaml
purpose: 현재 .md, .yaml, .gs, .py 중심의 엔진을 지속 확장 가능한 구조로 재정렬한다. 저성능 LLM도 이 TODO만 순서대로 실행하면 고성능 LLM과 동일한 판단 패킷과 보고서를 만들도록 권위
파일, 공식, 데이터, 하네스, 검증, 릴리스 절차를 단일화한다.
business_constants:
target_asset_krw: 500000000
default_investment_unit: weekly
mandatory_weekly_rebalancing_days:
- Saturday
- Sunday
mandatory_mid_month_review_days:
- 1
- 11
- 21
cash_defense_rule: D+2 정산예정 현금은 즉시현금 방어선 충족으로 간주
llm_numeric_authority: LLM은 가격, 수량, 점수, TP, SL, 게이트를 생성하지 않고 하네스 값을 복사·해설만 한다.
source_basis:
primary_policy: data_feed/AGENTS.md
critical_read_order:
- runtime/active_artifact_manifest.yaml
- Temp/final_decision_packet_v3.json
- spec/13_formula_registry.yaml
- spec/12_field_dictionary.yaml
- schemas/*.schema.json
- governance/rules/*.yaml
- spec/*.yaml
current_hard_rules_from_agents:
- 가격, 수량, TP, SL, 점수는 spec/13_formula_registry.yaml과 하네스 산출값만 사용한다.
- 임의 계산, 임의 가격, 임의 수량, 미등록 공식은 금지한다.
- 하네스 결측은 DATA_MISSING — 하네스 업데이트 필요로만 표시한다.
- 차단된 종목의 산출값은 숨기지 말고 shadow ledger에 남긴다.
- Python canonical first, GAS adapter second 원칙을 따른다.
- Temp/*.json은 런타임 산출물이며 직접 편집하지 않는다.
baseline_inventory_observed_from_zip:
observed_total_files: 1623
observed_extension_counts:
.py: 717
.json: 706
.yaml: 137
.md: 42
.gs: 7
.txt: 6
.ps1: 4
.jsonl: 2
.log: 1
.js: 1
observed_top_directory_counts:
Temp: 377
src: 303
tools: 266
schemas: 160
tests: 158
runtime: 153
spec: 104
artifacts: 35
governance: 24
prompts: 9
docs: 8
examples: 8
observed_python_distribution:
runtime_generated_formula_py: 150
src_quant_engine_py: 153
tools_py: 261
total_py_observed: 717
observed_gas_files:
- gas_apex_alpha_watch.gs
- gas_apex_runtime_core.gs
- gas_data_collect.gs
- gas_data_feed.gs
- gas_harness_rows.gs
- gas_lib.gs
- gas_report.gs
observed_temp_duplicate_artifact_families_ge_3:
count: 33
examples:
smart_cash_recovery: 7
data_integrity_100_lock: 5
horizon_routing_lock: 5
canonical_metrics: 4
final_execution_decision: 4
prediction_accuracy_harness: 4
engine_harness_gate_result: 3
entry_freshness_gate: 3
observed_package_json_scripts: 190
observed_engine_gate_snapshot:
engine_harness_gate_status: OK
failed_checks_count: 0
effective_formula_coverage_pct: 100.0
gas_only_coverage_pct_observed: 58.56
warn_only_measure_yaml_gs_ps_output: GAS-only/GS coverage warning exists; effective coverage is 100% because Python covers
the missing formulas.
observed_pass_100_snapshot:
active_formula_id: PASS_100_CRITERIA_V3
gate: BLOCK_EXECUTION
score_0_100: 46.15
passed_count: 6
failed_count: 7
hts_order_mode: THEORETICAL_ONLY
observed_active_artifact_manifest_snapshot:
formula_id: ACTIVE_ARTIFACT_MANIFEST_V2
active_count_per_formula: 1
authority_collision_count: 0
stale_artifact_count: 0
report_active_artifact_match_pct: 100.0
single_truth_conflict_count: 0
senior_diagnosis:
one_line: 엔진은 이미 하네스·커버리지·검증은 많이 갖췄지만, 산출물 버전 과다, 문서 분산, GAS/Python 책임 혼재, release-gate 비대화로 장기 유지보수 리스크가 커졌다.
core_problem:
- 알고리즘 자체보다 알고리즘을 변경·검증·폐기하는 운영체계가 더 중요해진 단계다.
- Temp 산출물 버전이 많아지면 저성능 LLM은 최신 권위와 레거시 참조를 구분하지 못한다.
- 190개 npm script는 강력하지만, 단일 release DAG와 실패 원인 맵이 없으면 절차가 파편화된다.
- GAS가 7개 파일로 유지되지만 일부 파일은 과거 로직이 남을 가능성이 있어 thin adapter 정책을 강제해야 한다.
- 보고서/프롬프트/규칙 문서가 분산될수록 narrative가 하네스 판단을 완화하거나 과장할 위험이 생긴다.
target_state:
- YAML은 계약·공식·정책·테스트 케이스의 유일한 인간 편집 원천으로 둔다.
- Python은 모든 공식과 판단의 canonical implementation으로 둔다.
- GAS는 collect, normalize, export, display만 수행하는 thin adapter로 둔다.
- Markdown은 설명, ADR, runbook, prompt 용도만 허용하고 판단 권위를 갖지 않는다.
- JSON은 runtime 산출물로만 취급하고 source of truth가 되지 않게 한다.
- LLM은 final_decision_packet과 active_artifact_manifest를 읽어 렌더링만 한다.
recommended_methodology:
name: 'CFD-QEOS: Contract-First Deterministic Quant Engineering Operating System'
translation: 계약 우선·결정론적 퀀트 엔진 운영체계
why_this_methodology:
- 퀀트 엔진은 창의적 문서 작성 문제가 아니라 반복 가능한 산출물 생성 문제다.
- 투자 판단은 경험칙이 아니라 입력 데이터, 공식, 게이트, 검증 결과의 함수여야 한다.
- 저성능 LLM 호환성을 얻으려면 지시문을 늘리는 것이 아니라 자유도를 줄이고 입력·출력 계약을 고정해야 한다.
- 장기 확장성은 새 팩터 추가 속도가 아니라 새 팩터가 기존 게이트와 충돌하지 않는지 증명하는 속도에서 나온다.
five_non_negotiable_principles:
P1_single_authority: 같은 의미의 필드는 active artifact가 1개만 존재해야 한다.
P2_formula_registry_first: 새 숫자·점수·게이트는 먼저 formula registry에 등록하고, 단위·입력·결측 정책·owner·golden case를 명시한다.
P3_python_canonical: 공식·판단·수량·TP/SL·리스크 스코어는 Python canonical 구현이 원본이다.
P4_gas_thin_adapter: GAS는 외부 수집과 시트 입출력만 담당하며 투자 판단 로직을 보유하지 않는다.
P5_renderer_no_calculation: Markdown 보고서와 LLM 응답은 계산하지 않고 final_decision_packet 값을 복사한다.
allowed_source_extensions_policy:
.yaml: contract, formula registry, data contract, policy, golden cases, release DAG, task plan
.py: canonical engine, validator, builder, test, CLI wrapper
.gs: Google Sheets/Apps Script thin adapter for collect-normalize-export-display only
.md: runbook, ADR, doctrine, prompt, human explanation only; no numeric authority
.json: generated runtime artifact only; do not hand-edit; not a durable source file
canonical_dataflow:
- raw_capture_or_sheet -> GAS collect/normalize/export
- exported_data_json -> Python data contract validator
- validated_data -> Python feature builders
- features -> formula registry implementations
- formula outputs -> gates and decision packet
- decision packet -> active artifact manifest
- manifest + packet -> report renderer
- report renderer -> Markdown/LLM output with zero calculations
release_lifecycle:
- change_request_yaml 작성
- ADR 또는 rule_lifecycle 항목 작성
- spec/formula_registry 또는 relevant spec 갱신
- schema/golden case 먼저 작성
- Python canonical 구현
- GAS adapter는 필요할 때만 thin wrapper 갱신
- unit/parity/regression/e2e 검증
- shadow ledger에서 N회 운용
- performance readiness 기준 충족 시 active manifest 승격
- 레거시 산출물은 legacy_reference_only로 잠그고 보고서 렌더링 차단
target_repository_structure:
AGENTS.md: 운영 헌법과 읽기 순서만 유지. 장문 규칙은 governance/rules와 spec으로 이동.
spec/:
role: source of truth for contracts, formulas, gates, schemas, field dictionary
must_contain:
- 00_execution_contract.yaml
- 02_data_contract.yaml
- 09_decision_flow.yaml
- 12_field_dictionary.yaml
- 13_formula_registry.yaml
- risk/*.yaml
- strategy/*.yaml
- execution/*.yaml
must_not_contain:
- runtime outputs
- temporary audit outputs
- duplicated narrative prompts
src/quant_engine/:
role: canonical Python package
proposed_modules:
- data_contracts/
- features/
- formulas/
- gates/
- portfolio/
- execution/
- reporting/
- evaluation/
- adapters/
tools/: thin CLI wrappers only; business logic must import src.quant_engine modules.
gas_*.gs: collect/normalize/export/display only; forbidden decision logic count must trend to zero.
governance/: ADR, change requests, rule lifecycle, authority matrix, release policy.
tests/: unit, parity, golden, regression, integration, e2e, leak, deterministic replay.
runtime/: active manifest and runtime config; no hand editing.
Temp/: generated artifacts only; no manual source authority; cleanup policy required.
prompts/: renderer prompts only; prompts cannot define formulas or override gates.
docs/: doctrine and runbook only; docs must cite spec IDs rather than redefining rules.
governance_score_formulas:
authority_integrity_score:
formula: 100 - 25*authority_collision_count - 10*stale_artifact_count - 10*legacy_reference_render_blocked_count - 5*duplicate_active_formula_count
pass_threshold: 100
block_threshold: < 95
llm_hallucination_risk_score:
formula: 20*missing_provenance_number_count + 15*renderer_calculation_count + 10*free_text_override_count + 10*data_missing_hidden_count
pass_threshold: 0
block_threshold: '> 0'
formula_implementation_score:
formula: 100 * implemented_formula_count / registered_formula_count
pass_threshold: 100
low_capability_reproducibility_score:
formula: 100 - 20*non_deterministic_output_count - 10*ambiguous_instruction_count - 10*manual_selection_count - 10*missing_acceptance_test_count
pass_threshold: 100
quant_performance_readiness_score:
formula: min(data_maturity_score, live_sample_score, prediction_quality_score, drawdown_control_score, execution_quality_score)
pass_threshold: 90
note: 평균이 아니라 최저축 기준. 약한 축 하나가 있으면 실전 승격 불가.
harness_suite_to_standardize:
- harness_id: H01_DATA_CONTRACT_GATE
purpose: 필수 컬럼, 타입, 단위, 통화, 날짜, 원천, 결측 정책 검증
block_if:
- missing_critical_field_count > 0
- schema_presence_score < 100
- stale_data_ratio > 0
- harness_id: H02_FORMULA_REGISTRY_GATE
purpose: 모든 공식이 registry, Python implementation, golden case, owner ledger를 갖는지 검증
block_if:
- unmapped_formula_count > 0
- implementation_coverage_pct < 100
- harness_id: H03_SINGLE_TRUTH_GATE
purpose: 동일 필드가 여러 active artifact에 존재하는지 검증
block_if:
- authority_collision_count > 0
- single_truth_conflict_count > 0
- harness_id: H04_DETERMINISTIC_REPLAY_GATE
purpose: 같은 입력 해시에서 같은 final_decision_packet이 나오는지 검증
block_if:
- decision_reproducibility_score < 1.0
- harness_id: H05_NO_LEAKAGE_GATE
purpose: T+5/T+20 결과값이 신호 생성 시점 입력에 섞이지 않았는지 검증
block_if:
- future_leakage_count > 0
- train_test_overlap_count > 0
- harness_id: H06_PERFORMANCE_READINESS_GATE
purpose: 리플레이와 라이브 표본을 분리해 실제 승격 가능성을 평가
block_if:
- live_t20_count < 30
- performance_readiness_score < 90
- harness_id: H07_EXECUTION_PRECEDENCE_GATE
purpose: 하위 엔진 허용값이 최종 HTS 권한을 침범하지 못하게 차단
block_if:
- global_execution_gate != HTS_READY and hts_order_count > 0
- misleading_execution_allowed_count > 0
- harness_id: H08_GAS_THIN_ADAPTER_GATE
purpose: GAS 파일에 decision/sizing/stop/take_profit/risk_score 로직이 남아 있는지 검출
block_if:
- gas_forbidden_logic_count > 0
- harness_id: H09_RENDERER_NO_CALC_GATE
purpose: 보고서와 LLM 응답의 임의 계산, 숫자 창작, 게이트 완화 표현 차단
block_if:
- renderer_calculation_count > 0
- unproven_number_count > 0
- harness_id: H10_RELEASE_DAG_GATE
purpose: 190개 스크립트를 단일 release graph로 정렬하고 선행 실패를 명확히 보고
block_if:
- release_dag_cycle_count > 0
- required_gate_missing_count > 0
refactor_todo:
- id: P0-001
priority: P0
title: Source Authority Collapse — 파일 권위 체계 4계층으로 축소
problem: 문서와 산출물이 많아지면서 저성능 LLM이 spec, prompt, Temp artifact, report 중 무엇이 최신 권위인지 혼동할 수 있다.
methodology: repo_cartography + authority_matrix + runtime_manifest_lock
target_state: 권위는 spec YAML, 구현은 Python, 어댑터는 GAS, 설명은 Markdown으로 분리하고 JSON은 생성물로만 둔다.
files_to_create_or_modify:
- AGENTS.md
- governance/authority_matrix.yaml
- runtime/active_artifact_manifest.yaml
- tools/validate_source_authority_collapse_v1.py
step_by_step_for_low_capability_llm:
- 모든 파일을 extension과 directory 기준으로 분류한다.
- .yaml 파일은 contract/formula/policy/golden_case/release_dag 중 하나의 role을 부여한다.
- .py 파일은 canonical_module, cli_wrapper, validator, generated_model 중 하나의 role을 부여한다.
- .gs 파일은 collect, normalize, export, display 외 role이 있으면 forbidden으로 표시한다.
- .md 파일은 doctrine, ADR, runbook, prompt 중 하나의 role만 허용한다.
- role이 없는 파일은 quarantine_candidate로 기록하고 runtime에서 읽지 않는다.
- active_artifact_manifest는 final_decision_packet과 canonical artifact만 참조하게 한다.
acceptance_tests:
- python tools/validate_source_authority_collapse_v1.py --root . --out Temp/source_authority_collapse_v1.json
- Temp/source_authority_collapse_v1.json.unclassified_source_file_count == 0
- Temp/source_authority_collapse_v1.json.json_source_authority_count == 0
- Temp/source_authority_collapse_v1.json.markdown_numeric_authority_count == 0
completion_metric: authority_integrity_score == 100
fail_policy: FAIL이면 보고서는 RELEASE_BLOCKED_BY_AUTHORITY_AMBIGUITY로 시작하고 신규 기능 병합 금지.
depends_on: []
- id: P0-002
priority: P0
title: Formula Registry V2 — 모든 숫자의 owner, 단위, 입력, 결측, 구현 연결
problem: 공식 수가 늘어날수록 미등록 숫자와 임의 계산이 가장 큰 홀루시네이션 원인이 된다.
methodology: formula_contract_before_implementation
target_state: spec/13_formula_registry.yaml 하나로 모든 점수·가격·수량·게이트·리스크 지표의 권위를 고정한다.
files_to_create_or_modify:
- spec/13_formula_registry.yaml
- spec/03_formulas/output_field_owner_ledger.yaml
- tools/validate_formula_registry_v2.py
- tests/golden/formula_registry_v2_cases.yaml
step_by_step_for_low_capability_llm:
- 각 formula_id에 purpose, owner, inputs, input_units, output_unit, missing_policy, stale_policy, python_impl, golden_case_id,
report_fields를 추가한다.
- 공식이 가격을 내면 tick_normalizer 공식 ID를 반드시 연결한다.
- 공식이 수량을 내면 position_sizing 또는 execution_contract 공식 ID를 반드시 연결한다.
- 공식이 게이트를 내면 fail_policy와 downstream_block_targets를 반드시 연결한다.
- report_fields에 없는 숫자는 Markdown 보고서에 출력하지 않는다.
- formula registry에 없는 숫자는 DATA_MISSING이 아니라 FORMULA_UNREGISTERED로 차단한다.
acceptance_tests:
- python tools/validate_formula_registry_v2.py --registry spec/13_formula_registry.yaml
- unowned_formula_count == 0
- missing_python_impl_count == 0
- missing_golden_case_count == 0
- unregistered_report_number_count == 0
completion_metric: formula_implementation_score == 100
fail_policy: FAIL이면 해당 공식 산출물은 active manifest 승격 금지. 보고서에는 FORMULA_UNREGISTERED만 출력.
depends_on:
- P0-001
- id: P0-003
priority: P0
title: Decision Packet Monolith — 최종 판단 패킷 하나만 보고서 입력으로 허용
problem: 보고서가 여러 Temp 산출물을 직접 읽으면 최신값/레거시값이 섞이고 수치 충돌이 발생한다.
methodology: single_packet_rendering + provenance_lock
target_state: 보고서 렌더러는 Temp/final_decision_packet_v4.json 또는 active manifest가 지정한 단일 패킷만 읽는다.
files_to_create_or_modify:
- spec/40_final_decision_packet_contract.yaml
- tools/build_final_decision_packet_v4.py
- tools/validate_final_decision_packet_v4.py
- tools/render_operational_report.py
step_by_step_for_low_capability_llm:
- final_decision_packet_contract에 executive, portfolio, ticker, risk, execution, performance, data_quality 섹션을 정의한다.
- 각 섹션의 모든 숫자는 source_path, json_pointer, formula_id, input_hash를 갖게 한다.
- render_operational_report.py에서 Temp 하위 artifact 직접 읽기를 제거한다.
- 렌더러가 추가 데이터가 필요하면 packet에 필드를 먼저 추가하고 다시 빌드한다.
- legacy artifact는 packet builder만 읽을 수 있고 report renderer는 읽지 못하게 한다.
acceptance_tests:
- python tools/validate_final_decision_packet_v4.py --packet Temp/final_decision_packet_v4.json
- python tools/validate_renderer_reads_packet_only_v1.py --renderer tools/render_operational_report.py
- direct_temp_artifact_read_count_in_renderer == 0
- packet_field_provenance_coverage_pct == 100
completion_metric: packet_provenance_coverage_pct == 100 and direct_temp_read_count == 0
fail_policy: FAIL이면 Markdown 생성 차단. LLM 응답은 final_decision_packet_missing_or_invalid만 표시.
depends_on:
- P0-001
- P0-002
- id: P0-004
priority: P0
title: Release DAG V1 — 190개 script를 단일 유향 비순환 그래프로 정렬
problem: 스크립트가 많으면 검증은 많은데 어떤 실패가 상위 실패인지 알기 어렵고, 저성능 LLM은 순서를 흔든다.
methodology: DAG_orchestration + fail_fast_root_cause
target_state: release_dag.yaml에 build, validate, render, package 단계를 명시하고 npm script는 DAG executor 하나로 수렴한다.
files_to_create_or_modify:
- spec/41_release_dag.yaml
- tools/run_release_dag_v1.py
- tools/validate_release_dag_v1.py
- package.json
step_by_step_for_low_capability_llm:
- package.json scripts를 inventory로 추출한다.
- 각 script를 build, validate, render, package, utility 중 하나로 분류한다.
- script 간 depends_on을 release_dag.yaml에 명시한다.
- DAG에 cycle이 있으면 즉시 실패 처리한다.
- 동일 산출물을 여러 script가 만들면 artifact_owner를 1개만 남긴다.
- npm run full-gate는 python tools/run_release_dag_v1.py --mode release 호출로 축소한다.
acceptance_tests:
- python tools/validate_release_dag_v1.py --dag spec/41_release_dag.yaml --package package.json
- release_dag_cycle_count == 0
- orphan_script_count == 0
- duplicate_artifact_owner_count == 0
- release_mode_required_gate_missing_count == 0
completion_metric: release_dag_health_score == 100
fail_policy: FAIL이면 release-gate 실행 금지. 가장 앞선 실패 노드 1개와 downstream skipped 목록만 출력.
depends_on:
- P0-001
- id: P0-005
priority: P0
title: Temp Artifact Retirement — 산출물 버전 과다 정리와 active/legacy 격리
problem: Temp에 동일 family의 v1~vN 산출물이 누적되어 최신 권위와 참고용 레거시가 섞일 위험이 있다.
methodology: active_manifest + quarantine_before_delete
target_state: active artifact는 formula_id별 1개만 runtime에서 읽고, 나머지는 legacy_reference_only 또는 archive로 이동한다.
files_to_create_or_modify:
- tools/build_artifact_retirement_plan_v1.py
- tools/validate_artifact_retirement_v1.py
- runtime/active_artifact_manifest.yaml
- governance/rules/05_migration_hashes.yaml
step_by_step_for_low_capability_llm:
- Temp/*.json, Temp/*.yaml, Temp/*.md 파일을 formula family별로 그룹화한다.
- 각 family에서 active artifact 1개를 active_artifact_manifest와 비교한다.
- active가 아닌 파일은 legacy_reference_only, archive_candidate, delete_candidate 중 하나로 분류한다.
- 보고서와 LLM이 legacy_reference_only를 직접 읽으면 stale_artifact_count를 증가시킨다.
- 아카이브 전 파일 hash를 governance/rules/05_migration_hashes.yaml에 남긴다.
- delete는 하지 말고 1차는 quarantine manifest만 만든다.
acceptance_tests:
- python tools/build_artifact_retirement_plan_v1.py --temp Temp --manifest runtime/active_artifact_manifest.yaml --out Temp/artifact_retirement_plan_v1.json
- python tools/validate_artifact_retirement_v1.py --plan Temp/artifact_retirement_plan_v1.json
- active_count_per_formula == 1
- report_legacy_direct_read_count == 0
- authority_collision_count == 0
completion_metric: active_count_per_formula == 1 and stale_artifact_count == 0
fail_policy: FAIL이면 legacy artifact가 포함된 보고서 렌더링 차단.
depends_on:
- P0-003
- id: P0-006
priority: P0
title: GAS Thin Adapter Migration — Apps Script에서 판단 로직 제거
problem: GAS와 Python이 동시에 판단하면 같은 공식의 결과가 미세하게 갈라지고 디버깅 비용이 폭증한다.
methodology: extract_business_logic_to_python + adapter_parity_test
target_state: GAS는 collect, normalize, export, display만 수행하고 decision/sizing/stop/take_profit/risk_score는 Python으로 이전한다.
files_to_create_or_modify:
- spec/39_gas_thin_adapter_policy.yaml
- tools/audit_gas_business_logic_v2.py
- tools/validate_gas_thin_adapter_v2.py
- gas_*.gs
- src/quant_engine/adapters/google_sheets.py
step_by_step_for_low_capability_llm:
- GAS 모든 함수를 파싱해 함수명, 호출자, 키워드, 라인 수를 추출한다.
- decision, sizing, stop_loss, take_profit, risk_score, score, gate 키워드를 forbidden 후보로 분류한다.
- forbidden 후보가 실제 투자 판단이면 Python src/quant_engine 모듈로 이관한다.
- GAS에는 Python 산출물 또는 시트 값을 읽고 표시하는 wrapper만 남긴다.
- GAS 라인 수 감소보다 forbidden_logic_count 감소를 KPI로 삼는다.
- 이관 후 동일 입력에서 GAS 표시값과 Python packet 값의 parity를 검사한다.
acceptance_tests:
- python tools/audit_gas_business_logic_v2.py --root . --out Temp/gas_business_logic_audit_v2.json
- python tools/validate_gas_thin_adapter_v2.py --audit Temp/gas_business_logic_audit_v2.json
- gas_forbidden_logic_count == 0
- gas_python_display_parity_pct == 100
completion_metric: gas_forbidden_logic_count == 0
fail_policy: FAIL이면 GAS 산출값은 display_only로 표시하고 final_decision_packet에 반영 금지.
depends_on:
- P0-002
- id: P0-007
priority: P0
title: Renderer No-Calculation Lock — 보고서와 LLM 응답 계산 금지
problem: 보고서가 보기 좋게 만들기 위해 계산을 시작하면 하네스와 숫자가 다르게 된다.
methodology: render_contract + static_analysis + packet_provenance_check
target_state: renderer와 prompt는 packet 값 복사, 정렬, 누락 표시, 위험 해설만 수행한다.
files_to_create_or_modify:
- spec/42_renderer_contract.yaml
- prompts/low_capability_report_renderer.md
- tools/validate_renderer_no_calculation_v2.py
- tools/validate_llm_response_contract_v4.py
step_by_step_for_low_capability_llm:
- 보고서 섹션별 허용 필드를 final_decision_packet_contract와 1:1 매핑한다.
- 렌더러에서 +, -, *, /, round, percent 계산 사용을 금지하거나 whitelist한다.
- 숫자를 출력할 때 provenance가 없으면 DATA_MISSING 또는 FORMULA_UNREGISTERED로 표시한다.
- LLM 프롬프트에서 '추정', '대략', '내 계산상' 같은 임의 숫자 문구를 금지한다.
- blocked/limited 종목도 산출된 가격·수량은 shadow ledger에 표시한다.
- 게이트가 AUDIT_ONLY이면 모든 주문표를 THEORETICAL_ONLY로 표시한다.
acceptance_tests:
- python tools/validate_renderer_no_calculation_v2.py --renderer tools/render_operational_report.py
- python tools/validate_llm_response_contract_v4.py --report Temp/operational_report.md --packet Temp/final_decision_packet_v4.json
- renderer_calculation_count == 0
- unproven_number_count == 0
- gate_softening_phrase_count == 0
completion_metric: llm_hallucination_risk_score == 0
fail_policy: FAIL이면 보고서 첫 줄에 RENDERER_CONTRACT_FAIL 표시 후 투자 액션 출력 금지.
depends_on:
- P0-003
- id: P0-008
priority: P0
title: PASS_100 Honest Gate — 실행 가능성과 보고 가능성 분리
problem: 현재 PASS_100이 BLOCK_EXECUTION이면 보고서는 가능해도 실제 HTS 주문은 이론값이어야 한다.
methodology: truth_gate_before_execution_gate
target_state: PASS_100 미달 시 모든 주문은 shadow/theoretical로 유지하고, 실전 실행은 HTS_READY와 live readiness를 모두 통과할 때만 허용한다.
files_to_create_or_modify:
- spec/30_completion_criteria_contract.yaml
- tools/build_pass_100_criteria_v4.py
- tools/validate_pass_100_honest_v2.py
- tools/build_final_execution_decision_v5.py
step_by_step_for_low_capability_llm:
- PASS_100 기준을 data, formula, truth, performance, execution, renderer, authority 축으로 나눈다.
- 각 기준은 actual, target, passed, source_json, formula_id, remediation을 갖게 한다.
- 실패 기준이 DATA_GATED이면 예상 해소 조건만 표시하고 임의 우회 금지한다.
- 실패 기준이 CODE_GATED이면 수정 파일과 테스트를 명시한다.
- FINAL_EXECUTION_HTS_READY가 false이면 hts_order_count는 반드시 0이어야 한다.
- PASS_100 미달이어도 리밸런싱 제안은 가능하지만 주문 실행 문구는 금지한다.
acceptance_tests:
- python tools/build_pass_100_criteria_v4.py --out Temp/pass_100_criteria_v4.json
- python tools/validate_pass_100_honest_v2.py --criteria Temp/pass_100_criteria_v4.json --execution Temp/final_execution_decision_v5.json
- if pass_100_allowed == false then hts_order_mode == THEORETICAL_ONLY
- if global_execution_gate != HTS_READY then hts_order_count == 0
completion_metric: execution_ambiguity_count == 0
fail_policy: FAIL이면 HTS 주문표 렌더링 전체 차단. shadow ledger만 출력.
depends_on:
- P0-003
- P0-007
- id: P1-009
priority: P1
title: Quant Factor Taxonomy — 단타/단기/중기/장기 팩터 계층화
problem: 팩터가 늘면 투자기간별 의미가 섞여 뒷북 매수와 설거지 매수를 동시에 강화할 수 있다.
methodology: horizon_specific_factor_contract
target_state: 각 팩터는 horizon, decay, required_sample, market_regime, conflict_policy를 갖는다.
files_to_create_or_modify:
- spec/43_quant_factor_taxonomy.yaml
- spec/strategy/*.yaml
- tools/validate_factor_taxonomy_v1.py
- src/quant_engine/features/
step_by_step_for_low_capability_llm:
- 모든 팩터를 scalping, short, mid, long 중 하나 이상의 horizon에 배정한다.
- 각 팩터에 expected_decay_days와 rebalance_frequency를 명시한다.
- 단타 팩터가 장기 보유 판단을 override하지 못하게 precedence를 정의한다.
- 장기 펀더멘털 팩터가 당일 실행 가격을 직접 만들지 못하게 차단한다.
- 스마트머니, 유동성, 펀더멘털, 모멘텀, 리스크 팩터의 conflict_policy를 정의한다.
- 상충 시 평균을 내지 말고 gate precedence로 결론을 낸다.
acceptance_tests:
- python tools/validate_factor_taxonomy_v1.py --taxonomy spec/43_quant_factor_taxonomy.yaml --registry spec/13_formula_registry.yaml
- unassigned_factor_count == 0
- horizon_conflict_without_policy_count == 0
- factor_without_decay_count == 0
completion_metric: factor_taxonomy_coverage_pct == 100
fail_policy: FAIL이면 신규 팩터 active 승격 금지. 기존 보고서에는 FACTOR_TAXONOMY_PENDING으로 표시.
depends_on:
- P0-002
- id: P1-010
priority: P1
title: Anti-Late-Chase / Anti-Distribution Harness — 뒷북·설거지 방지 전용 게이트
problem: 추세 후행 신호가 강해질수록 사용자는 고점 매수와 저점 매도를 반복할 수 있다.
methodology: pre_trade_gate + forward_return_calibration
target_state: 진입 전 5D/20D 과열, pullback quality, volume exhaustion, foreign/institution flow, distribution risk를 독립 차단 게이트로
둔다.
files_to_create_or_modify:
- spec/strategy/anti_late_entry_pullback_gate_v5.yaml
- spec/strategy/pre_distribution_early_warning_v4.yaml
- tools/build_anti_late_chase_v5.py
- tools/validate_anti_distribution_v4.py
step_by_step_for_low_capability_llm:
- 각 후보 종목에 5D return, 20D return, MA20 distance, RSI, 거래대금 배율, 수급 3D/5D, 음봉 거래량을 계산한다.
- 5일 급등 후 pullback_quality가 기준 미달이면 BUY가 아니라 WAIT_PULLBACK으로 둔다.
- distribution_score가 기준 이상이면 신규매수는 BLOCK, 보유는 TRIM_REVIEW로 둔다.
- late_chase_false_positive_rate를 T+5/T+20 결과로 매주 재계산한다.
- threshold 변경은 calibration_change_ledger에 변경 전후 승률과 MDD를 기록한다.
- 저성능 LLM은 신호 해석을 하지 말고 gate 결과와 reason_code만 복사한다.
acceptance_tests:
- python tools/build_anti_late_chase_v5.py --json GatherTradingData.json --out Temp/anti_late_chase_v5.json
- python tools/validate_anti_distribution_v4.py --out Temp/anti_distribution_validation_v4.json
- buy_after_5d_runup_without_pullback_count == 0
- distribution_confirmed_buy_count == 0
- late_chase_false_positive_rate <= 20
completion_metric: late_chase_false_positive_rate <= 20 and distribution_confirmed_buy_count == 0
fail_policy: FAIL이면 신규 BUY/ADD_ON은 SHADOW_LEDGER_ONLY. 기존 포지션은 보유/감축 판단만 허용.
depends_on:
- P1-009
- id: P1-011
priority: P1
title: Backtest/Replay/Live Separation — 리플레이 성과와 실전 성과 분리
problem: 리플레이 성과가 좋아도 live 표본이 부족하면 실제 실행 엔진으로 승격하면 안 된다.
methodology: evidence_segregation + promotion_gate
target_state: backtest, replay, paper, live를 분리하고 각 단계별 승격 기준을 명확히 둔다.
files_to_create_or_modify:
- spec/29_backtest_harness_contract.yaml
- spec/44_live_replay_separation.yaml
- tools/build_live_replay_separation_v2.py
- tools/validate_no_replay_live_mix_v1.py
step_by_step_for_low_capability_llm:
- 모든 outcome row에 source_type을 backtest, replay, paper, live 중 하나로 부여한다.
- live가 아닌 성과는 HTS_READY 승격 기준에 직접 사용하지 않는다.
- T+5, T+20, T+60 각각 required_live_sample을 정의한다.
- 성과 지표는 hit_rate, payoff_ratio, avg_return, median_return, max_drawdown, turnover, slippage를 함께 기록한다.
- 리플레이에서 개선된 threshold는 shadow로 N회 운용 후 live 승격한다.
- 데이터 부족은 실패가 아니라 WAIT_SAMPLE로 보고하되 주문 실행에는 사용하지 않는다.
acceptance_tests:
- python tools/build_live_replay_separation_v2.py --hist Temp/proposal_evaluation_history.json --out Temp/live_replay_separation_v2.json
- python tools/validate_no_replay_live_mix_v1.py --json Temp/live_replay_separation_v2.json
- replay_used_as_live_count == 0
- live_t20_count >= 30 before performance_ready == true
completion_metric: replay_live_mix_count == 0
fail_policy: FAIL이면 performance_ready=false, PASS_100 해당 기준 실패 유지.
depends_on:
- P0-008
- id: P1-012
priority: P1
title: Data Provenance Ledger — 모든 숫자에 원천과 신선도 부착
problem: 출처와 시간 정보 없는 숫자는 그럴듯하지만 투자 엔진에서는 독이다.
methodology: provenance_everywhere + stale_data_gate
target_state: 모든 report number는 source_path, json_pointer, formula_id, input_hash, as_of, freshness_status를 갖는다.
files_to_create_or_modify:
- spec/45_number_provenance_contract.yaml
- tools/build_number_provenance_ledger_v4.py
- tools/validate_number_provenance_strict_v3.py
- src/quant_engine/reporting/provenance.py
step_by_step_for_low_capability_llm:
- final_decision_packet의 모든 leaf 숫자를 순회한다.
- 각 숫자가 provenance 객체를 갖지 않으면 violation으로 기록한다.
- 시장 데이터는 as_of와 market_session을 기록한다.
- 계좌 데이터는 capture_time과 D+2 정산현금 포함 여부를 기록한다.
- 결측 또는 오래된 값은 confidence cap을 적용하고 신규 매수 게이트에 반영한다.
- Markdown에 출력되는 숫자와 packet provenance를 1:1 대조한다.
acceptance_tests:
- 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
- number_provenance_coverage_pct == 100
- stale_critical_number_count == 0
- unproven_report_number_count == 0
completion_metric: number_provenance_coverage_pct == 100
fail_policy: FAIL이면 미증빙 숫자는 보고서에서 숨기지 말고 DATA_MISSING_PROVENANCE로 표시. 주문 판단에는 사용 금지.
depends_on:
- P0-003
- P0-007
- id: P1-013
priority: P1
title: Portfolio Risk Budget Cascade — 목표 5억까지 손실 방어 우선순위 수치화
problem: 목표금액 5억에 가까워질수록 수익률보다 손실 방어와 현금 방어선이 더 중요해진다.
methodology: risk_budget_before_alpha
target_state: 총자산, 목표갭, 현금비율, 포지션 heat, 섹터 집중도, beta, drawdown을 하나의 risk budget cascade로 묶는다.
files_to_create_or_modify:
- spec/36_goal_risk_budget_harness.yaml
- spec/risk/aggregate_risk.yaml
- tools/build_goal_risk_budget_harness_v3.py
- tools/validate_risk_budget_cascade_v1.py
step_by_step_for_low_capability_llm:
- 총자산과 목표 5억의 gap_pct를 계산한다.
- gap이 작아질수록 신규 위성 매수 한도를 자동 축소한다.
- D+2 정산현금을 immediate_cash_equivalent로 포함한다.
- 현금 방어선 미달이면 BUY보다 cash_recovery와 trim_review를 우선한다.
- 섹터 집중도, 단일종목 비중, beta, 손실률을 total_heat로 통합한다.
- risk_budget이 부족하면 알파 점수가 높아도 수량을 줄인다.
acceptance_tests:
- python tools/build_goal_risk_budget_harness_v3.py --json GatherTradingData.json --out Temp/goal_risk_budget_harness_v3.json
- python tools/validate_risk_budget_cascade_v1.py --json Temp/goal_risk_budget_harness_v3.json
- cash_equivalent_includes_d_plus_2 == true
- risk_budget_overrun_order_count == 0
- portfolio_heat_field_present == true
completion_metric: risk_budget_violation_count == 0
fail_policy: FAIL이면 신규매수 차단, 리밸런싱/현금회복/위험감축 제안만 허용.
depends_on:
- P0-002
- P1-012
- id: P2-014
priority: P2
title: Document Shrink & Doctrine Split — 문서 과다를 3종으로 축소
problem: 문서가 많으면 지침 충돌이 늘고, 긴 프롬프트는 저성능 LLM에서 오히려 일관성을 해친다.
methodology: doctrine_minimalism + yaml_rule_authority
target_state: Markdown은 doctrine, runbook, ADR 세 종류로만 남기고 세부 규칙은 YAML spec으로 이동한다.
files_to_create_or_modify:
- docs/doctrine.md
- docs/runbook.md
- governance/adr_index.yaml
- tools/validate_docs_no_rule_duplication_v1.py
- prompts/*.md
step_by_step_for_low_capability_llm:
- 모든 .md 파일을 doctrine, runbook, ADR, prompt, report_sample 중 하나로 분류한다.
- Markdown 내부의 숫자 공식, 임계값, 권위 규칙을 찾아 spec YAML로 이동한다.
- Markdown에는 spec ID 링크만 남긴다.
- prompt는 입력/출력 형식과 금지사항만 포함하고 투자 이론을 중복 설명하지 않는다.
- AGENTS.md는 읽기 순서와 하드 룰만 유지하고 200줄 이하를 목표로 한다.
- 변경 후 validate_docs_no_rule_duplication을 실행한다.
acceptance_tests:
- python tools/validate_docs_no_rule_duplication_v1.py --root . --out Temp/docs_rule_duplication_v1.json
- markdown_rule_duplication_count == 0
- prompt_formula_definition_count == 0
- agents_md_line_count <= 200
completion_metric: markdown_rule_duplication_count == 0
fail_policy: FAIL이면 문서 변경은 병합 가능하지만 release gate 승격 금지. 중복 규칙은 spec YAML로 이관할 때까지 보류.
depends_on:
- P0-001
- P0-002
- id: P2-015
priority: P2
title: Change Request Discipline — 새 팩터/규칙/문서 추가의 표준 절차
problem: 좋은 아이디어라도 검증 없이 추가되면 엔진은 똑똑해지는 것이 아니라 불안정해진다.
methodology: CR -> shadow -> evidence -> active -> retire
target_state: 모든 변경은 change_request YAML과 ADR/rule_lifecycle을 거쳐 shadow -> active로 승격한다.
files_to_create_or_modify:
- governance/change_request_template.yaml
- governance/rule_lifecycle.yaml
- governance/adr_index.yaml
- tools/validate_change_request_v1.py
step_by_step_for_low_capability_llm:
- 새 제안은 반드시 change_request YAML로 시작한다.
- 요청서에는 problem, expected_metric, affected_formulas, affected_outputs, rollback_plan을 포함한다.
- 새 공식은 shadow_only 상태로 최소 N회 또는 required_sample까지 운용한다.
- 기존 규칙과 충돌하면 authority_matrix에 precedence를 명시한다.
- 성과 개선이 없거나 drawdown이 악화되면 retirement_condition에 따라 폐기한다.
- 폐기된 규칙은 삭제 전에 migration hash와 reason을 남긴다.
acceptance_tests:
- python tools/validate_change_request_v1.py --requests governance/change_requests --lifecycle governance/rule_lifecycle.yaml
- change_request_missing_metric_count == 0
- rule_without_retirement_condition_count == 0
- shadow_to_active_without_evidence_count == 0
completion_metric: shadow_to_active_without_evidence_count == 0
fail_policy: FAIL이면 해당 변경은 active manifest 반영 금지.
depends_on:
- P0-001
- id: P2-016
priority: P2
title: Low-Capability LLM Execution Pack — 저성능 LLM 전용 실행 패킷
problem: 저성능 LLM은 긴 맥락보다 짧고 엄격한 입력 패킷, 고정 순서, 금지어, 출력 템플릿이 필요하다.
methodology: small_context + rigid_template + output_diff_validation
target_state: final_context_for_llm.json/yaml은 필수 필드만 담고, LLM은 체크리스트 순서대로 빈칸을 채운다.
files_to_create_or_modify:
- spec/31_low_capability_llm_response_contract.yaml
- spec/46_low_capability_execution_pack.yaml
- prompts/low_capability_report_renderer.md
- tools/build_final_context_for_llm_v4.py
- tools/validate_low_capability_pack_v1.py
step_by_step_for_low_capability_llm:
- final_decision_packet에서 LLM에 필요한 필드만 추려 final_context_for_llm_v4를 만든다.
- context는 executive, blockers, action_table, shadow_ledger, data_missing, education_notes 순서로 고정한다.
- 각 필드에는 display_value와 source_key를 함께 넣는다.
- LLM 지시는 1) 복사 2) 정렬 3) 누락표시 4) 해설 순서만 허용한다.
- LLM이 쓸 수 없는 동사는 예측한다, 보장한다, 확정한다, 계산했다로 정의한다.
- 응답 검증기는 report와 packet의 숫자 차이를 0으로 요구한다.
acceptance_tests:
- python tools/build_final_context_for_llm_v4.py --packet Temp/final_decision_packet_v4.json --out Temp/final_context_for_llm_v4.yaml
- python tools/validate_low_capability_pack_v1.py --context Temp/final_context_for_llm_v4.yaml --contract spec/46_low_capability_execution_pack.yaml
- context_required_field_coverage_pct == 100
- ambiguous_instruction_count == 0
- llm_free_numeric_field_count == 0
completion_metric: low_capability_reproducibility_score == 100
fail_policy: FAIL이면 저성능 LLM용 보고서 생성 금지. 고성능 LLM도 같은 packet-only 모드로 제한.
depends_on:
- P0-003
- P0-007
- id: P2-017
priority: P2
title: Observability Dashboard — 엔진 품질을 매주 수치로 관리
problem: 엔진 개선이 느낌으로 관리되면 문서만 늘고 성능은 좋아지지 않는다.
methodology: measure_every_release + owner_accountability
target_state: 릴리스마다 authority, data, formula, performance, execution, renderer, repo hygiene 점수를 저장한다.
files_to_create_or_modify:
- spec/37_evaluation_dashboard_contract.yaml
- tools/build_engine_observability_dashboard_v1.py
- Temp/continuous_evaluation_dashboard_v3.json
- docs/runbook.md
step_by_step_for_low_capability_llm:
- 각 release 실행 후 주요 품질 점수를 JSON으로 저장한다.
- 점수는 현재값, 전회값, 변화량, 차단 사유, owner를 포함한다.
- 주간 토/일 리밸런싱 때 dashboard를 먼저 읽는다.
- 매월 1/11/21 중간점검에는 PASS_100 실패 기준과 성과 표본 누적을 별도 보고한다.
- 점수가 악화된 항목은 자동으로 change_request 초안을 생성한다.
- dashboard가 없으면 보고서는 DATA_MISSING_DASHBOARD로 시작한다.
acceptance_tests:
- python tools/build_engine_observability_dashboard_v1.py --root . --out Temp/continuous_evaluation_dashboard_v3.json
- dashboard_axis_count >= 7
- dashboard_owner_coverage_pct == 100
- weekly_rebalance_check_present == true
- mid_month_check_rule_present == true
completion_metric: dashboard_owner_coverage_pct == 100
fail_policy: FAIL이면 리밸런싱 제안은 가능하나 엔진 개선 성과 주장은 금지.
depends_on:
- P0-004
- P1-011
- id: P3-018
priority: P3
title: Repository Packaging Policy — 업로드 zip은 운용에 필요한 최소 세트만 포함
problem: zip에 너무 많은 산출물과 중간 파일이 들어가면 LLM 컨텍스트 비용과 해석 오류가 증가한다.
methodology: minimal_upload_bundle + reproducible_build
target_state: source, contract, active runtime, essential report만 포함하고 archive/legacy/generated bulk는 제외한다.
files_to_create_or_modify:
- tools/prepare_upload_zip.py
- spec/47_packaging_policy.yaml
- tools/validate_packaging_policy_v1.py
step_by_step_for_low_capability_llm:
- zip 포함 파일을 source_required, runtime_required, report_required, test_required로 분류한다.
- Temp에서는 active manifest가 지정한 파일과 operational_report만 포함한다.
- legacy_reference_only와 archive_candidate는 zip에서 제외한다.
- generated Python model은 필요한 경우만 dist로 포함하고 원본 schema가 있으면 재생성 가능하게 한다.
- zip 생성 후 포함 파일 수, 크기, excluded 이유를 manifest로 남긴다.
- 업로드용 zip과 개발 전체 zip을 분리한다.
acceptance_tests:
- python tools/prepare_upload_zip.py --validation-mode release --profile
- python tools/validate_packaging_policy_v1.py --zip ../data_feed.zip --policy spec/47_packaging_policy.yaml
- upload_zip_legacy_artifact_count == 0
- upload_zip_unclassified_file_count == 0
- upload_zip_required_file_missing_count == 0
completion_metric: upload_zip_unclassified_file_count == 0
fail_policy: FAIL이면 업로드 zip 생성 실패로 처리하고 사용자 보고에는 마지막 정상 manifest만 사용.
depends_on:
- P0-005
- P2-016
low_capability_llm_master_procedure:
role: REPORT_CLERK_AND_CHECKLIST_EXECUTOR_ONLY
absolute_do_not:
- 가격, 수량, 수익률, TP, SL, 점수, 게이트를 직접 계산하지 않는다.
- Temp legacy artifact를 임의로 최신값으로 선택하지 않는다.
- PASS_100 미달 상태에서 HTS 실행 가능 문구를 쓰지 않는다.
- 데이터 결측을 추정값으로 채우지 않는다.
- 하네스가 BLOCK한 결론을 narrative로 완화하지 않는다.
execution_order:
- 1. AGENTS.md의 읽기 순서를 확인한다.
- 2. runtime/active_artifact_manifest.yaml에서 active artifact만 확인한다.
- 3. final_decision_packet을 읽고 모든 숫자의 provenance를 확인한다.
- 4. PASS_100, final_execution_gate, hts_order_count를 먼저 출력한다.
- 5. global_execution_gate가 HTS_READY가 아니면 모든 주문표를 THEORETICAL_ONLY로 표시한다.
- 6. 종목별 action은 packet의 action_code와 reason_code만 복사한다.
- 7. DATA_MISSING, FORMULA_UNREGISTERED, STALE_DATA는 숨기지 않고 표로 출력한다.
- 8. 마지막에 이번 주 리밸런싱 TODO와 다음 검증 명령만 출력한다.
fixed_output_sections:
- A. 시스템 게이트와 차단 사유
- B. 포트폴리오 현황과 목표 5억 gap
- C. 현금/D+2 방어선
- D. 종목별 action table
- E. shadow ledger / theoretical orders
- F. 데이터 결측·신선도·provenance
- G. 이번 주 리밸런싱 액션
- H. 엔진 개선 TODO와 검증 명령
recommended_first_7_days_execution_plan:
- day: 1
focus: P0-001~P0-002
deliverable: authority_matrix + formula_registry_v2 validation
do_not: 새 팩터 추가 금지
- day: 2
focus: P0-003
deliverable: final_decision_packet_v4 contract and renderer packet-only draft
do_not: 보고서에서 Temp 직접 읽기 금지
- day: 3
focus: P0-004
deliverable: release_dag.yaml and root-cause fail-fast executor
do_not: full-gate에 임시 script 계속 추가 금지
- day: 4
focus: P0-005
deliverable: artifact_retirement_plan_v1 with quarantine manifest
do_not: 바로 삭제하지 말고 hash와 legacy reason 기록
- day: 5
focus: P0-006~P0-007
deliverable: GAS forbidden logic audit + renderer no-calculation lock
do_not: GAS에서 신규 판단 로직 작성 금지
- day: 6
focus: P0-008 + P1-012
deliverable: honest PASS_100 + number provenance strict gate
do_not: 실행 가능성과 보고 가능성 혼용 금지
- day: 7
focus: P1-009~P1-011
deliverable: factor taxonomy + anti-late-chase + live/replay separation
do_not: 리플레이 성과를 실전 승격 근거로 사용 금지
definition_of_done_for_best_quant_engine:
source_authority: authority_integrity_score == 100
formula: formula_implementation_score == 100 and missing_golden_case_count == 0
data: schema_presence_score == 100 and missing_critical_field_count == 0 and stale_critical_number_count == 0
decision: single_truth_conflict_count == 0 and decision_reproducibility_score == 1.0
execution: global_execution_gate == HTS_READY only when PASS_100 true and hts_order_count > 0
report: renderer_calculation_count == 0 and unproven_report_number_count == 0
performance: live_t20_count >= 30 and performance_readiness_score >= 90 before active execution upgrade
maintenance: all changes pass change_request -> shadow -> evidence -> active lifecycle
llm: low_capability_reproducibility_score == 100
final_recommendation:
immediate_decision: 새 문서를 더 만드는 방식은 중단하고, source authority collapse와 final_decision_packet monolith부터 수행한다.
architecture_decision: YAML contract + Python canonical + GAS thin adapter + Markdown doctrine/report로 고정한다.
pm_decision: P0-001~P0-008 전에는 신규 팩터나 매매 알고리즘 추가를 금지한다.
quant_decision: 성과 개선은 리플레이가 아니라 live/paper 분리 표본과 drawdown 방어 기준으로만 승격한다.
developer_decision: tools는 CLI wrapper로 줄이고 src/quant_engine에 canonical domain logic을 모은다.
task_execution_status:
summary:
implemented: 18
validated: 14
completed: 14
blocked: 4
operational_ready: false
items:
- id: P0-001
status: completed
- id: P0-002
status: completed
- id: P0-003
status: blocked
reason: render_operational_report.py의 Temp 직접 읽기 제거가 아직 남음
- id: P0-004
status: blocked
reason: package.json full-gate를 단일 release DAG executor로 수렴하는 대규모 리팩토링이 남음
- id: P0-005
status: completed
- id: P0-006
status: blocked
reason: gas_*.gs의 forbidden decision logic을 0으로 만드는 thin adapter 이관이 남음
- id: P0-007
status: blocked
reason: renderer no-calculation lock이 render_operational_report.py 전체 정리 없이는 충족되지 않음
- id: P0-008
status: completed
- id: P1-009
status: completed
- id: P1-010
status: completed
- id: P1-011
status: completed
- id: P1-012
status: completed
- id: P1-013
status: completed
- id: P2-014
status: completed
- id: P2-015
status: completed
- id: P2-016
status: completed
- id: P2-017
status: completed
- id: P3-018
status: completed