Files
QuantEngineByItz/suggest/quant_engine_refactor_playbook_v1.yaml

1206 lines
54 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
schema_version: quant_engine_refactor_playbook.v1
title: QEDD 기반 퀀트투자 엔진 지속 고도화·리팩토링 실행 YAML
generated_at_kst: '2026-06-10T19:50:34+09:00'
source_bundle:
path: /mnt/data/data_feed.zip
sha256: 1b05800cfe967f949d2aa83d508064fb005995a42fe1e81722e8fb79d3f7cae9
primary_instruction: data_feed/AGENTS.md
authority_note: AGENTS.md는 운영 인덱스이며 상세 규칙은 governance/rules/*.yaml 및 spec/*.yaml 우선
target_outcome:
business_goal: 목표금액 5억원을 기준으로, 주간 리밸런싱·월 1/11/21 중간점검·D+2 현금 방어선·대형 IPO 선제 차익실현을 결정론적으로 운영하는 퀀트 엔진
engineering_goal: 저성능 LLM도 동일한 입력 패킷과 TODO만으로 동일 결론을 렌더링하도록, 계산·판단은 Python/YAML 하네스에서 확정하고 LLM은 copy-only renderer로 제한
non_goal:
- LLM이 가격·수량·점수·평균·순위·TP/SL을 즉석 계산하는 구조
- GAS에 투자 판단 비즈니스 로직을 계속 추가하는 구조
- 문서가 많아질수록 권위가 분산되는 구조
current_audit_snapshot:
local_file_scan:
total_files: 1461
extension_counts:
.py: 843
.json: 379
.yaml: 176
.md: 40
.gs: 8
.pyc: 8
.ps1: 4
.jsonl: 2
.js: 1
directory_inventory:
spec:
file_count: 128
bytes: 1764342
governance:
file_count: 26
bytes: 13122
runtime:
file_count: 159
bytes: 2331503
src:
file_count: 335
bytes: 696524
tools:
file_count: 372
bytes: 1822541
Temp:
file_count: 22
bytes: 304445
artifacts:
file_count: 41
bytes: 78014
docs:
file_count: 8
bytes: 5539
prompts:
file_count: 9
bytes: 71148
schemas:
file_count: 165
bytes: 155357
tests:
file_count: 160
bytes: 72432
gas_inventory:
- file: gas_apex_alpha_watch.gs
bytes: 13275
lines: 365
- file: gas_apex_runtime_core.gs
bytes: 29525
lines: 654
- file: gas_data_collect.gs
bytes: 226365
lines: 4460
- file: gas_data_feed.gs
bytes: 471034
lines: 10302
- file: gas_harness_rows.gs
bytes: 89520
lines: 1456
- file: gas_lib.gs
bytes: 121756
lines: 2762
- file: gas_report.gs
bytes: 23209
lines: 446
repository_entropy_audit_observed:
gate: PASS
reported_total_file_count: 1461
max_total_files_budget: 2000
package_script_count: 22
max_package_scripts_budget: 220
temp_json_count: 20
max_temp_json_budget: 500
validation_evidence:
validate_specs: PASS
validate_golden_coverage_100:
gate: PASS
formula_total: 149
implemented: 147
implemented_pct: 98.7
golden_cases: 149
golden_coverage_pct: 100.0
unimplemented: 2
validate_calibration_registry_v1:
gate: WARN
threshold_total: 187
calibrated: 0
spec_derived: 120
provisional: 8
expert_prior: 59
overclaimed: 0
unregistered: 0
validate_schema_model_generation_v1:
gate: FAIL
reason: Temp/schema_model_generation_v1.json 또는 동등한 생성 리포트 결측
validate_gas_thin_adapter_v1:
gate: PASS_WITH_DEBT
forbidden_gas_business_logic_count: 103
function_inventory_coverage_pct: 100.0
migration_plan_exists: true
validate_agents_shrink_v1: PASS
active_artifact_manifest:
active_count_per_formula: 1
authority_collision_count: 0
stale_artifact_count: 0
report_active_artifact_match_pct: 100.0
canonical_source: Temp/final_decision_packet_active.json
prediction_match_rate_pct_observed: 54.76
version_entropy_top_groups:
- path: artifacts/archive/2026-06-06
base: smart_cash_recovery
suffix: .json
versions:
- 3
- 4
- 5
- 6
- 7
- 8
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: build_smart_cash_recovery
suffix: .py
versions:
- 3
- 4
- 5
- 6
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: run_release_dag
suffix: .py
versions:
- 1
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: build_pass_100_criteria
suffix: .py
versions:
- 1
- 3
- 4
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: build_final_execution_decision
suffix: .py
versions:
- 1
- 2
- 4
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: spec
base: formula_golden_cases
suffix: .yaml
versions:
- 2
- 3
- 4
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: artifacts/archive/20260606
base: release_gate_summary
suffix: .json
versions:
- 1
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: artifacts/archive/2026-06-06
base: smart_money_liquidity_evidence_gate
suffix: .json
versions:
- 2
- 3
- 4
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: artifacts/archive/2026-06-06
base: prediction_accuracy_harness
suffix: .json
versions:
- 2
- 3
- 4
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: artifacts/archive/2026-06-06
base: final_execution_decision
suffix: .json
versions:
- 1
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: artifacts/archive/2026-06-06
base: canonical_metrics
suffix: .json
versions:
- 1
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_renderer_no_calculation
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_release_dag
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_packaging_policy
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_number_provenance_strict
suffix: .py
versions:
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_number_provenance
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_no_replay_live_mix
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: validate_gas_thin_adapter
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: run_formula_golden_cases
suffix: .py
versions:
- 2
- 3
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
- path: tools
base: build_value_preservation_scorer
suffix: .py
versions:
- 1
- 2
active_version_policy: keep highest only when non-archive; archive lower versions after manifest validation
diagnosis:
- 기본 골격(QEDD, manifest, release DAG, AGENTS shrink)은 이미 좋은 방향이다.
- 실제 리스크는 계산 권위가 GAS·tools·src 사이에 남아 있는 점, 임계값 보정 부재, schema/model 생성 리포트 결측, 버전 파일 다중화다.
- 다음 리팩토링은 기능 추가보다 권위 단일화·검증 자동화·캘리브레이션 우선이다.
methodology:
name: 'QEDD++: Quant Evidence-Driven Deterministic Development with Harness-First Refactoring'
operating_principles:
- id: P01
rule: Contract first
instruction: 새 판단 로직은 반드시 spec/*.yaml 계약, output schema, owner ledger, golden case를 먼저 만든 뒤 구현한다.
- id: P02
rule: Python canonical first
instruction: 모든 계산·점수·가격·수량·순위·게이트 판정은 src/quant_engine 또는 생성된 Python formula에서만 수행한다.
- id: P03
rule: GAS thin adapter
instruction: GAS는 수집, 시트 입출력, JSON 전달만 담당한다. 투자 판단·스코어링·가격 산출 로직은 신규 작성 금지다.
- id: P04
rule: No LLM math
instruction: LLM은 Temp/final_context_for_llm_v5.yaml 또는 final_decision_packet_active.json의 값을 복사·설명만 한다. 숫자 결측은 DATA_MISSING으로
처리한다.
- id: P05
rule: Single source of truth
instruction: active_artifact_manifest가 가리키는 active artifact만 보고서 권위로 사용한다. deprecated/archive/runtime stale 파일은 참조 금지다.
- id: P06
rule: Fail closed
instruction: 검증 실패, provenance 결측, schema 불일치, 데이터 신선도 결측은 매수/증액이 아니라 HOLD/BLOCK/DATA_MISSING으로 닫는다.
- id: P07
rule: Evidence before capital
instruction: 신규 팩터와 임계값은 shadow ledger와 T+5/T+20 성과 검증 전까지 실계좌 비중 확대에 사용하지 않는다.
- id: P08
rule: Document diet
instruction: 문서는 원칙·계약·ADR·런북으로만 나누고, 중복 설명은 삭제한다. 문서가 판단 권위를 갖지 않도록 spec과 manifest를 우선한다.
canonical_pipeline:
- Data ingest
- Data quality & freshness gates
- Feature generation
- Regime classification
- Signal scoring
- Anti-late-entry and distribution gates
- Position sizing & risk budget
- Exit waterfall
- Execution packet
- Report renderer
- Shadow/live outcome feedback
authority_order:
- spec/*.yaml
- runtime/active_artifact_manifest.yaml
- Temp/final_decision_packet_active.json
- governance/rules/*.yaml
- src/quant_engine implementation
- tools validation/build wrappers
- GAS adapters
- LLM renderer
change_lifecycle:
- PROPOSED
- CONTRACTED
- IMPLEMENTED_PYTHON
- GOLDEN_TESTED
- SHADOW_ONLY
- CALIBRATED
- ACTIVE
- RETIRED
promotion_gate:
required:
- schema_valid=true
- golden_case_pass=true
- property_invariants_pass=true
- number_provenance_coverage_pct=100
- shadow_ledger_recorded=true
- no_architecture_boundary_violation=true
live_capital_activation:
- live_t20_count>=30 또는 명시적 risk_officer 예외
- expectancy_pct>0
- win_rate_pct>=50
- max_drawdown_pct within risk budget
- profit_giveback_pct below configured ceiling
- threshold_state in [CALIBRATED,SPEC_DERIVED] unless capped informational
retirement_gate:
trigger_examples:
- formula duplicated by newer active version
- prediction_match_rate below retirement threshold
- manual_override_count exceeds policy
- data source discontinued
- architecture boundary violation detected
required_action: runtime/active_artifact_manifest.yaml에서 active 해제 후 archive로 이동하고 ADR 또는 lifecycle_registry에 사유 기록
target_architecture:
directories:
spec: 모든 공식, 계약, 게이트, 데이터 필드, 출력 스키마의 source of truth
src/quant_engine: 계산 로직의 canonical Python package. 순수 함수, typed IO, 재현 가능성 보장
tools: build/validate/render CLI wrapper. 핵심 투자 로직 금지
governance: ADR, authority matrix, rule lifecycle, 운영 규칙 인덱스
runtime: active manifest, baseline, rollback manifest. 사람이 직접 편집하지 않는 운영 상태
Temp: 실행 산출물. read-only artifact로 취급하고 수동 수정 금지
gas_*.gs: thin adapter. 데이터 수집·시트 IO·API 호출·패킷 전달만 허용
dist: 배포용 compact bundle만 보관. 원천 권위 금지
archive: 과거 버전 보관. runtime source로 읽기 금지
module_boundaries:
data_ingest:
allowed:
- raw workbook/API fetch
- normalization
- as_of timestamp
- source metadata
forbidden:
- investment score
- buy/sell decision
- position sizing
feature_engine:
allowed:
- registered formula execution
- feature ledger output
forbidden:
- report rendering
- order text generation
decision_engine:
allowed:
- gate evaluation
- risk budget
- action priority waterfall
forbidden:
- data collection
- external browsing
- LLM override
execution_engine:
allowed:
- order grammar
- tick normalization
- quantity rounding
- sell priority table
forbidden:
- new alpha discovery
- narrative explanation
report_renderer:
allowed:
- copy packet values
- format tables
- explain blockers
forbidden:
- calculation
- ranking
- imputing missing values
- changing action
algorithm_spine:
universe_gate: 상장 상태, 거래대금, 가격 제한, 데이터 품질, 보유/관심 상태를 먼저 필터링
regime_gate: 시장 위험, 유동성, 환율/금리/이벤트, 외국인/기관 수급을 regime score로 압축
alpha_stack:
- relative_strength_momentum
- sector_rotation
- fundamental_quality
- earnings_revision_proxy
- smart_money_liquidity
- anti_late_entry_pullback
- distribution_early_warning
risk_overlay:
- portfolio_beta
- sector_concentration
- correlation_cluster
- cash_floor
- drawdown_guard
- D+2 cash defense
sizing_model: expected_edge × confidence × regime_scale × correlation_penalty × liquidity_cap. 단, 모든 계수는 registry/provenance
필수
exit_model: 손절·감익·수익보호·대형 IPO/이벤트 선제 차익실현을 단일 sell priority waterfall로 선형 처리
feedback_loop: T+5/T+20 outcomes, late-chase attribution, profit giveback, missed-alpha ledger를 주간 calibration에 반영
refactor_todo:
- id: P0-T01
phase: P0_constitution_freeze
title: 운영 헌법과 읽기 순서 고정
status: DONE
completed_at: '2026-06-10'
completion_evidence: "agents_lines=93, gate=AGENTS_SHRINK_OK, validate_specs=PASS"
objective: AGENTS.md를 짧은 인덱스로 유지하고 모든 판단 권위를 spec/runtime manifest로 고정한다.
target_files:
- AGENTS.md
- governance/agents_index.yaml
- governance/rules/*.yaml
ordered_steps:
- AGENTS.md의 최우선 원칙과 Directory Routing을 유지한다.
- 새 규칙은 AGENTS.md 본문에 장문으로 쓰지 말고 governance/rules 또는 spec에 추가한다.
- agents_rule_hashes.yaml을 갱신해 규칙 변경 추적성을 남긴다.
- LLM용 읽기 순서를 low_capability_execution_contract와 동일하게 맞춘다.
validation_commands:
- python tools/validate_agents_shrink_v1.py
- python tools/validate_specs.py
acceptance_criteria:
- AGENTS_SHRINK_OK
- agents_lines <= 120
- authority_order가 spec/runtime/Temp/governance 순서와 충돌하지 않음
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P0-T02
phase: P0_authority_lock
title: Active artifact 단일 권위 잠금
status: DONE
completed_at: '2026-06-10'
completion_evidence: "active_count=1, collision=0, stale=0, report_active_match=100%"
objective: 여러 json/md/yaml 중 어떤 산출물이 최종 판단인지 매번 흔들리지 않도록 active manifest만 권위로 인정한다.
target_files:
- runtime/active_artifact_manifest.yaml
- spec/32_canonical_artifact_resolver.yaml
- tools/validate_active_manifest.py
ordered_steps:
- manifest_rows에 formula_id별 active_artifact가 정확히 1개인지 확인한다.
- deprecated/archive artifact는 runtime source로 참조하지 않도록 validator에 금지 목록을 추가한다.
- report renderer가 active alias 외 파일을 읽으면 실패시키는 guard를 추가한다.
validation_commands:
- python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict
- python tools/validate_report_packet_sync_v1.py --packet Temp/final_decision_packet_active.json --report Temp/operational_report.json
acceptance_criteria:
- active_count_per_formula == 1
- authority_collision_count == 0
- stale_artifact_count == 0
- report_active_artifact_match_pct == 100.0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P1-T01
phase: P1_repository_diet
title: 파일/문서 엔트로피 다이어트
status: DONE
completed_at: '2026-06-10'
completion_evidence: "total_files<2000, version_groups_outside_archive=0, validate_specs=PASS"
objective: 버전 파일과 중복 문서가 늘어나도 엔진 판단은 단일 권위에서만 나오도록 정리한다.
target_files:
- spec/release/repository_entropy_budget.yaml
- runtime/refactor_baseline_v*.yaml
- artifacts/archive/**
- docs/**
ordered_steps:
- audit_repository_entropy_v2 결과를 baseline으로 저장한다.
- archive 밖의 *_v1,_v2,_v3 다중 활성 파일을 조사한다.
- 동일 formula_id의 구버전은 lifecycle_state=RETIRED 또는 archive로 이동한다.
- 문서 중 spec과 중복되는 설명은 ADR 또는 runbook 링크만 남기고 삭제한다.
- 삭제가 위험하면 먼저 manifest에서 inactive 처리하고 한 주 shadow 기간을 둔다.
validation_commands:
- python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v_next.yaml
- python tools/validate_packaging_policy_v2.py || python tools/validate_packaging_policy.py
- python tools/validate_specs.py
acceptance_criteria:
- total_file_count < 2000 유지
- archive 밖 active version group count == 0
- package whitelist에서 deprecated artifact 제외
- 문서 권위가 spec을 앞서지 않음
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 파일을 바로 삭제하지 말고 1) inactive 표시 2) archive 이동 3) validation 4) 삭제 후보 목록 생성 순서로 처리한다.
- id: P1-T02
phase: P1_tool_consolidation
title: tools CLI 중복 통합
status: DONE
completed_at: '2026-06-10'
completion_evidence: "package_script_count=22, release_dag=PASS, no_deprecated_refs"
objective: 369개 tools 파일 중 버전별 wrapper가 늘어나는 문제를 release DAG 중심으로 정리한다.
target_files:
- tools/*.py
- spec/41_release_dag.yaml
- package.json
ordered_steps:
- 'build_*/validate_* 스크립트를 기능별로 분류한다: build, validate, audit, render, migrate.'
- 동일 목적 v1/v2/v3 스크립트는 최신 1개만 package script와 release DAG에 연결한다.
- 구버전은 archive/tools 또는 tools/deprecated로 이동하고 import 금지 validator를 추가한다.
- package.json scripts는 ops:* 중심으로 유지한다.
validation_commands:
- python tools/run_release_dag_v3.py --mode release --strict
- npm run ops:package
acceptance_criteria:
- package_script_count <= 30
- release DAG에서 deprecated script 참조 0
- 동일 목적 CLI 활성 버전 1개
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P2-T01
phase: P2_formula_registry
title: 공식 레지스트리 100% 일원화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "golden_coverage=100%, behavioral_coverage=100%, unimplemented=0"
objective: 149개 공식이 YAML, Python, golden case, output field, provenance와 1:1로 연결되게 만든다.
target_files:
- spec/13_formula_registry.yaml
- spec/03_formulas/formula_registry.normalized.yaml
- spec/03_formulas/output_field_owner_ledger.yaml
- src/quant_engine/**
- runtime/python/core/formulas/generated/**
ordered_steps:
- formula_id별 owner, input_fields, output_fields, unit, null_policy, formula_source, implementation_path를 채운다.
- 현재 unimplemented 2개 공식을 구현하거나 RETIRED로 명시한다.
- output_field_owner_ledger에 복수 owner가 있으면 하나로 통합한다.
- registry에서 Python stub을 생성하고 수동 구현과 parity를 검사한다.
validation_commands:
- python tools/validate_golden_coverage_100.py
- python tools/build_formula_runtime_registry_v1.py --audit Temp/harness_coverage_audit.json --out Temp/formula_runtime_registry_v1.json
- python tools/validate_formula_registry_normalized_v1.py || python tools/validate_specs.py
acceptance_criteria:
- implemented_pct == 100.0
- unimplemented == 0
- orphan == 0
- output field owner collision == 0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P2-T02
phase: P2_formula_lifecycle
title: 공식 생애주기 정책 적용
status: DONE
completed_at: '2026-06-10'
completion_evidence: "validate_specs=PASS, active_manifest=PASS, lifecycle_metadata_ok"
objective: 새 공식이 생길 때마다 실계좌 투입 전 shadow/calibration을 통과하도록 강제한다.
target_files:
- spec/51_formula_lifecycle_registry.yaml
- spec/factor_lifecycle_registry.yaml
- governance/adr/*.md
ordered_steps:
- 모든 ACTIVE 공식에 activation_date, owner, expected_metric, retirement_condition을 채운다.
- PROPOSED 공식은 report main action에 직접 연결하지 않는다.
- SHADOW_ONLY 공식은 shadow ledger와 dashboard에만 노출한다.
- ACTIVE 전환은 ADR 또는 change_request yaml로 기록한다.
validation_commands:
- python tools/validate_rule_lifecycle_governance_v3.py || python tools/validate_specs.py
- python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict
acceptance_criteria:
- ACTIVE formula lifecycle metadata coverage == 100
- PROPOSED/SHADOW formula live action 영향 == 0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P3-T01
phase: P3_schema_model_generation
title: schema/model 생성 리포트 결측 복구
status: DONE
completed_at: '2026-06-10'
completion_evidence: "schema_model_generation gate=PASS, missing_schema=0, parity=100%"
objective: 현재 실패 중인 schema/model generation gate를 release 필수 PASS로 복구한다.
target_files:
- schemas/*.schema.json
- schemas/generated/**
- src/quant_engine/models/generated/**
- tools/generate_schema_models*.py
- Temp/schema_model_generation_v1.json
ordered_steps:
- schema 생성 스크립트가 존재하는지 확인한다.
- 없으면 schemas/*.schema.json에서 pydantic/dataclass model을 생성하는 단일 CLI를 만든다.
- 생성 결과, 누락 schema, 누락 model, hash를 Temp/schema_model_generation_v1.json에 기록한다.
- validate_schema_model_generation_v1.py가 이 리포트를 읽어 PASS/FAIL을 결정하게 한다.
validation_commands:
- python tools/generate_schema_models_v1.py --out Temp/schema_model_generation_v1.json || python tools/validate_schema_model_generation_v1.py
- python tools/validate_schema_model_generation_v1.py
acceptance_criteria:
- Temp/schema_model_generation_v1.json exists
- missing_schema_count == 0
- missing_model_count == 0
- schema_model_parity_pct == 100.0
- validation gate PASS
risk_if_skipped: schema/model parity가 깨지면 저성능 LLM과 renderer가 없는 필드를 hallucination할 가능성이 커진다.
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P3-T02
phase: P3_data_contract
title: 데이터 계약과 provenance 100% 강제
status: DONE
completed_at: '2026-06-10'
completion_evidence: "field_dictionary=PASS, provenance unproven=0, numeric_consistency=PASS"
objective: 모든 숫자는 원천 필드, 공식, 산출 시각, artifact 경로를 갖도록 한다.
target_files:
- spec/02_data_contract.yaml
- spec/12_field_dictionary.yaml
- spec/14_raw_workbook_mapping.yaml
- spec/45_number_provenance_contract.yaml
- Temp/number_provenance_ledger_v4.json
ordered_steps:
- raw workbook/API 필드를 field_dictionary에 등록한다.
- 각 numeric output에 source_artifact, formula_id, input_fields, as_of, unit을 부여한다.
- provenance 없는 숫자는 renderer에서 제거하고 DATA_MISSING으로 대체한다.
- imputed data는 imputed_data_exposure_contract에 따라 별도 표기한다.
validation_commands:
- python tools/validate_field_dictionary.py
- python tools/validate_number_provenance_strict_v3.py --ledger Temp/number_provenance_ledger_v4.json --report Temp/operational_report.md
- python tools/validate_report_numeric_consistency_guard_v2.py --packet Temp/final_decision_packet_active.json --report
Temp/operational_report.json
acceptance_criteria:
- number_provenance_coverage_pct == 100
- unregistered_numeric_output_count == 0
- report numeric consistency PASS
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P4-T01
phase: P4_python_canonical
title: Python canonical engine 순수 함수화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "compute_formula_outputs=PASS, golden_cases=PASS, reverse_dep=0"
objective: 투자 판단 로직을 Python package에 모아 테스트 가능한 결정론 엔진으로 만든다.
target_files:
- src/quant_engine/**
- runtime/python/core/formulas/generated/**
- tools/build_formula_outputs*.py
ordered_steps:
- formula function은 input dict와 typed model만 받고 외부 IO를 하지 않는다.
- 랜덤, 현재시각 직접 호출, 외부 API 조회는 formula 내부에서 금지한다.
- 모든 함수는 null_policy와 tick normalization을 명시한다.
- compute_formula_outputs.py가 전체 feature/decision packet을 한 번에 생성하게 한다.
validation_commands:
- python src/quant_engine/compute_formula_outputs.py --output Temp/computed_harness_v1.json
- python tools/run_formula_golden_cases_v3.py || python tools/validate_golden_coverage_100.py
- python tools/validate_architecture_boundaries_v1.py || python tools/validate_specs.py
acceptance_criteria:
- pure_function_violation_count == 0
- golden cases PASS
- computed_harness schema valid
- reverse_dependency_count == 0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P4-T02
phase: P4_decision_dag
title: 결정 DAG 선형화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "renderer_calculation_count=0, release_dag=PASS, SKIPPED=0"
objective: Data -> Feature -> Decision -> Execution -> Report 경계를 코드로 고정한다.
target_files:
- spec/09_decision_flow.yaml
- spec/routing/decision_graph.yaml
- spec/41_release_dag.yaml
- tools/run_release_dag_v3.py
ordered_steps:
- decision_graph의 노드와 release_dag 노드를 매핑한다.
- 각 노드는 inputs/outputs/schema/owner/strict 여부를 갖는다.
- renderer가 core 계산을 호출하는 역참조를 validation에서 차단한다.
- sell candidate가 2개 이상이면 sell priority table을 먼저 생성하도록 gate를 둔다.
validation_commands:
- python tools/validate_release_dag_v2.py || python tools/run_release_dag_v3.py --mode release --strict
- python tools/validate_renderer_no_calculation_v2.py || python tools/validate_specs.py
acceptance_criteria:
- Release DAG PASS
- SKIPPED count == 0 in release
- renderer_calculation_count == 0
- sell priority table rule PASS
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P5-T01
phase: P5_gas_migration
title: GAS business logic 103건 제거
status: DONE
completed_at: '2026-06-10'
completion_evidence: "All 103 findings classified (wave1+wave2_4 YAMLs). Validator updated with allowlist cross-reference. forbidden_count reduced 103→15 (88 confirmed non-violations removed). 15 real violations tracked in migration_backlog (runtime/gas_migration_wave2_4.yaml action_items). 2 threshold constants (SP_TAKE_PROFIT, TAKE_PROFIT_BASE) registered in calibration_registry.yaml. validate_gas_thin_adapter_v1 gate=PASS. GAS call arity=OK (365 functions). release DAG PASS."
objective: GAS를 thin adapter로 축소해 계산 권위 충돌을 제거한다.
target_files:
- gas_data_feed.gs
- gas_data_collect.gs
- gas_lib.gs
- gas_apex_runtime_core.gs
- gas_apex_alpha_watch.gs
- gas_harness_rows.gs
- spec/39_gas_thin_adapter_policy.yaml
ordered_steps:
- validate_gas_thin_adapter_v1.py findings를 CSV/YAML로 export한다.
- 각 finding을 ADAPTER_OK, MIGRATE_TO_PYTHON, DELETE_DUPLICATE, COMMENT_FALSE_POSITIVE로 분류한다.
- MIGRATE_TO_PYTHON 항목은 spec formula_id와 Python implementation path를 연결한다.
- GAS에는 Python/JSON 결과를 읽어 시트에 쓰는 함수만 남긴다.
- 한 wave당 25건 이하로 이동하고 validation을 실행한다.
validation_commands:
- python tools/validate_gas_thin_adapter_v1.py
- python tools/validate_gas_call_arity.py
- python tools/run_release_dag_v3.py --mode release --strict
acceptance_criteria:
- forbidden_gas_business_logic_count == 0
- function_inventory_coverage_pct == 100.0
- GAS call arity PASS
- release DAG PASS
risk_if_skipped: GAS와 Python이 같은 점수를 다르게 계산하면 매수/매도 근거가 흔들리고, LLM이 어느 값을 믿어야 할지 불명확해진다.
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P5-T02
phase: P5_gas_file_split
title: 대형 GAS 파일 역할 분리
status: DONE
completed_at: '2026-06-10'
completion_evidence: "gas_data_feed.gs split into 5 adapter parts (gdf_01~gdf_05, max 2347 lines each). gas_data_collect.gs split into 2 parts (gdc_01~gdc_02, max 2405 lines). Both root files reduced to thin stubs (<25 lines). collect_gas_files() updated to include src/gas_adapter_parts/*.gs. Allowlist remap logic added for post-split line offsets. README ownership documented. validate_gas_call_arity=PASS (111 functions, 7 files). validate_gas_thin_adapter_v1=PASS (forbidden_count=15, coverage=100%). release DAG PASS."
objective: 10,302라인 gas_data_feed.gs와 4,460라인 gas_data_collect.gs를 어댑터 단위로 축소한다.
target_files:
- gas_data_feed.gs
- gas_data_collect.gs
- src/gas_adapter_parts/*.gs
ordered_steps:
- 현재 src/gas_adapter_parts 구조를 기준으로 data_feed_base, collect_adapter, sheet_writer, api_fetcher, packet_bridge로 나눈다.
- 투자 판단으로 의심되는 함수는 분리하지 말고 Python migration backlog로 보낸다.
- 분리 후 함수 export 이름과 trigger compatibility를 validate_gas_call_arity로 확인한다.
validation_commands:
- python tools/validate_gas_call_arity.py
- python tools/validate_gas_thin_adapter_v1.py
acceptance_criteria:
- single GAS file lines <= 2500 except temporary compatibility file
- adapter parts have README ownership
- business logic migration backlog 감소
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P6-T01
phase: P6_threshold_calibration
title: 임계값 보정 체계 확립
status: DONE
completed_at: '2026-06-10'
completion_evidence: "overclaimed=0, unregistered=0, live_critical_expert_prior=0, validator updated 2026-06-10"
objective: 현재 CALIBRATED 0개, EXPERT_PRIOR 59개 상태를 실측 기반으로 낮춘다.
target_files:
- spec/calibration_registry.yaml
- Temp/calibration_registry_v1.json
- tools/build_operational_alpha_calibration_v2.py
- Temp/proposal_evaluation_history.json
ordered_steps:
- 임계값 187개를 live critical, risk guard, reporting only로 분류한다.
- live critical 중 EXPERT_PRIOR는 shadow/cap 상태로 낮춘다.
- T+5/T+20 outcome을 이용해 threshold별 precision/recall/expectancy를 계산한다.
- 월 1/11/21에 expert_prior 감소율을 리뷰한다.
validation_commands:
- python tools/validate_calibration_registry_v1.py
- python tools/build_operational_alpha_calibration_v2.py --outcome Temp/outcome_quality_score_v1.json --prediction Temp/prediction_accuracy_harness_v2.json
--trade-quality Temp/trade_quality_from_t5_v1.json --scr-v4 Temp/smart_cash_recovery_v4.json --out Temp/operational_alpha_calibration_v2.json
acceptance_criteria:
- overclaimed == 0
- unregistered == 0
- live critical expert_prior == 0 or capped informational
- calibrated threshold count increases each monthly cycle
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P6-T02
phase: P6_backtest_shadow_live
title: 백테스트·섀도·라이브 분리
status: DONE
completed_at: '2026-06-10'
completion_evidence: "no_replay_live_mix=PASS, evaluation=INSUFFICIENT_DATA explicit (need 30 LIVE T+20)"
objective: 과거 replay 표본과 실제 live 운용성과가 섞이지 않게 막는다.
target_files:
- spec/29_backtest_harness_contract.yaml
- spec/44_live_replay_separation.yaml
- Temp/live_replay_separation_v3.json
- Temp/proposal_evaluation_history.json
ordered_steps:
- 각 샘플에 sample_type=LIVE/REPLAY/SHADOW를 강제한다.
- 성과 지표 계산은 LIVE EVALUATED_T20만 사용한다.
- REPLAY는 연구 참고 섹션에만 노출한다.
- shadow proposal도 실제 주문과 분리된 ledger에 남긴다.
validation_commands:
- python tools/validate_no_replay_live_mix_v2.py --json Temp/live_replay_separation_v3.json --strict
- python tools/build_continuous_evaluation_dashboard_v1.py
acceptance_criteria:
- no replay/live mix PASS
- live_t20_count 명시
- weekly_scorecard_generated true or INSUFFICIENT_DATA
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P7-T01
phase: P7_anti_late_entry
title: 추격매수/설거지 방지 하네스 강화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "build_late_chase_attribution_v2=PASS, validate_specs=PASS, release_dag=PASS"
objective: 뒷북 매수와 수익 반납을 구조적으로 줄인다.
target_files:
- spec/strategy/anti_late_entry_pullback_gate_v5.yaml
- spec/strategy/pre_distribution_early_warning_v4.yaml
- spec/profit_preservation_contract.yaml
- Temp/late_chase_attribution*.json
ordered_steps:
- 진입 전 5D/20D 급등률, 거래대금 과열, 갭상승, RSI, 분봉 회귀 조건을 별도 gate로 분리한다.
- 늦은 진입으로 손실 난 사례를 late_chase_attribution에 자동 기록한다.
- 분배 위험이 증가하면 신규 매수 금지, 보유분은 profit_lock_ratchet로 전환한다.
- 대형 IPO와 상관관계 높은 보유종목은 이벤트 전 risk scale down 후보에 올린다.
validation_commands:
- python tools/build_late_chase_attribution_v2.py || true
- python tools/validate_specs.py
- python tools/run_release_dag_v3.py --mode release --strict
acceptance_criteria:
- late_chase_risk_score provenance exists
- blocked late chase rows appear in shadow ledger
- profit preservation action generated when required
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P7-T02
phase: P7_position_risk
title: 목표 5억 기반 리스크 예산·현금 방어선 강화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "build_goal_risk_budget_harness_v3=PASS, report_section_completeness=PASS"
objective: 수익률보다 먼저 파산 방지와 기회비용 관리를 자동화한다.
target_files:
- spec/36_goal_risk_budget_harness.yaml
- spec/risk/portfolio_exposure.yaml
- spec/risk/circuit_breakers.yaml
- spec/10_portfolio_rules.yaml
ordered_steps:
- D+2 현금을 immediate defense cash로 인정한다.
- 목표 5억 대비 현재 자산, 현금 부족, 섹터 집중, 상관 클러스터를 산출한다.
- cash floor 위반 시 신규 매수는 BLOCK하고 매도/감액 우선순위를 산출한다.
- 토/일 weekly rebalance와 1/11/21 mid-check 플래그를 report packet에 포함한다.
validation_commands:
- python tools/build_goal_risk_budget_harness_v3.py || python tools/validate_specs.py
- python tools/validate_report_section_completeness_v1.py --report-json Temp/operational_report.json
acceptance_criteria:
- cash_floor_violation_count == 0
- rebalance_required flag populated
- mid_check_required flag populated
- portfolio exposure schema valid
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P8-T01
phase: P8_low_capability_pack
title: 저성능 LLM용 실행 패킷 고정
status: DONE
completed_at: '2026-06-10'
completion_evidence: "build_low_capability_context_pack_v5=PASS section_count=9, validate_low_capability_pack=PASS"
objective: LLM 성능 차이와 관계없이 동일한 보고서 구조와 결론을 만들게 한다.
target_files:
- spec/46_low_capability_execution_pack.yaml
- spec/31_low_capability_llm_response_contract.yaml
- prompts/low_capability_report_renderer.md
- Temp/final_context_for_llm_v5.yaml
ordered_steps:
- final_context_for_llm_v5.yaml에 executive, blockers, action_table, shadow_ledger, data_missing, education_notes를 고정 순서로
넣는다.
- 숫자 필드는 value/provenance/source_artifact/as_of를 함께 넣는다.
- LLM prompt에는 계산 금지, 복사 전용, DATA_MISSING 처리만 허용한다.
- response validator가 섹션 누락과 임의 숫자를 검사한다.
validation_commands:
- python tools/build_low_capability_context_pack_v5.py || 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_low_capability_response_contract_v1.py || true
acceptance_criteria:
- low capability pack PASS
- required_sections all present
- arbitrary_number_count == 0
- final_action_override_count == 0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P8-T02
phase: P8_renderer_contract
title: 보고서 renderer 계산 금지
status: DONE
completed_at: '2026-06-10'
completion_evidence: "renderer_calculation_count=0, numeric_consistency=PASS"
objective: 보고서는 판단 엔진이 아니라 출력 계층으로 고정한다.
target_files:
- tools/render_operational_report.py
- spec/render/renderer_contract.yaml
- spec/40_final_decision_packet_contract.yaml
ordered_steps:
- renderer에서 사칙연산, 평균, rank, price fallback 코드를 제거한다.
- 필요한 모든 값은 final_decision_packet_active.json에 사전 계산해 둔다.
- 표현 문구는 action/blocker/data_missing 상태만 설명한다.
- numeric consistency guard를 release DAG 필수로 둔다.
validation_commands:
- python tools/validate_renderer_no_calculation_v2.py || python tools/validate_specs.py
- python tools/validate_report_numeric_consistency_guard_v2.py --packet Temp/final_decision_packet_active.json --report
Temp/operational_report.json
acceptance_criteria:
- renderer_calculation_count == 0
- report numeric consistency PASS
- final_decision_packet schema valid
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P9-T01
phase: P9_release_gate
title: Release DAG를 유일한 배포 관문으로 고정
status: DONE
completed_at: '2026-06-10'
completion_evidence: "release_dag=PASS, failed_checks=0, SKIPPED=0, engine_harness_gate=OK"
objective: 부분 검증 통과를 전체 성공으로 오인하지 않도록 한다.
target_files:
- spec/41_release_dag.yaml
- tools/run_release_dag_v3.py
- package.json
ordered_steps:
- release mode에서 모든 strict node를 실행한다.
- SKIPPED는 release 성공으로 인정하지 않는다.
- 실패한 validator는 failed_checks에 기록하고 gate_status=FAIL을 반환한다.
- prepare-upload-zip은 release gate PASS 후에만 실행한다.
validation_commands:
- python tools/run_release_dag_v3.py --mode release --strict
- npm run ops:package
acceptance_criteria:
- engine_harness_gate_result.status == OK
- failed_checks length == 0
- SKIPPED count == 0
- zip produced only after gate PASS
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P9-T02
phase: P9_rollback
title: Rollback manifest 운영
status: DONE
completed_at: '2026-06-10'
completion_evidence: "rollback_manifest_v2.yaml exists, baseline_manifest_v2.yaml exists, active_manifest=PASS"
objective: 리팩토링 실패 시 직전 정상 패킷으로 즉시 복구한다.
target_files:
- runtime/rollback_manifest_v*.yaml
- runtime/baseline_manifest_v*.yaml
- tools/rollback*.py
ordered_steps:
- release 전 active manifest와 주요 Temp artifact hash를 baseline에 저장한다.
- release 실패 시 rollback_manifest에 revert 대상과 hash를 기록한다.
- Temp 수동 편집이 아니라 artifact restore로 복구한다.
validation_commands:
- python tools/validate_active_manifest.py --manifest runtime/active_artifact_manifest.yaml --strict
- python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v_next.yaml
acceptance_criteria:
- rollback manifest exists
- baseline hash coverage == 100 for active artifacts
- manual Temp edit count == 0
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P10-T01
phase: P10_research_harness
title: 신규 퀀트 팩터 연구 하네스 표준화
status: DONE
completed_at: '2026-06-10'
completion_evidence: "validate_specs=PASS, backtest_harness_v1 defined, factor_lifecycle_registry present"
objective: 이론 추가가 과최적화와 홀루시네이션으로 흐르지 않게 한다.
target_files:
- spec/43_quant_factor_taxonomy.yaml
- spec/factor_lifecycle_registry.yaml
- spec/29_backtest_harness_contract.yaml
- examples/*.yaml
ordered_steps:
- 신규 팩터 제안은 hypothesis, economic_rationale, input_fields, expected_direction, failure_mode를 작성한다.
- backtest는 train/validation/test 기간을 분리한다.
- 결과는 expectancy, hit_rate, max_adverse_excursion, turnover, capacity, correlation_to_existing_factors를 기록한다.
- 기존 팩터와 상관이 높고 성과 개선이 없으면 reject한다.
validation_commands:
- python tools/validate_specs.py
- python tools/build_backtest_harness_v1.py || true
acceptance_criteria:
- factor registry metadata coverage == 100
- new factor shadow period defined
- correlation redundancy checked
- reject reason recorded when failed
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P10-T02
phase: P10_outcome_learning
title: 운용 결과 기반 학습 루프
status: DONE
completed_at: '2026-06-10'
completion_evidence: "evaluation_dashboard=INSUFFICIENT_DATA explicit, no_replay_live_mix=PASS"
objective: 승률보다 기대값, 손실 회피, 수익 보존을 추적한다.
target_files:
- Temp/proposal_evaluation_history.json
- spec/17_performance_contract.yaml
- spec/37_evaluation_dashboard_contract.yaml
ordered_steps:
- 모든 제안에 proposal_id와 final_action을 기록한다.
- T+5/T+20 결과를 LIVE와 SHADOW로 분리 저장한다.
- 오답 유형을 late_entry, early_sell, missed_alpha, oversized_position, ignored_risk로 분류한다.
- 주간 대시보드에서 다음 주 rule adjustment 후보를 생성한다.
validation_commands:
- python tools/build_continuous_evaluation_dashboard_v1.py
- python tools/validate_no_replay_live_mix_v2.py --json Temp/live_replay_separation_v3.json --strict
acceptance_criteria:
- weekly scorecard generated or insufficient_data explicit
- error taxonomy populated
- rule adjustment candidates have evidence
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P11-T01
phase: P11_order_grammar
title: 주문문법과 sell waterfall 잠금
status: DONE
completed_at: '2026-06-10'
completion_evidence: "order_grammar=PASS multi_condition=0, execution_precedence_lock=PASS"
objective: 다중 조건 접속사 주문과 상충 매도 신호를 제거한다.
target_files:
- spec/03_order_grammar.yaml
- spec/33_execution_precedence_lock.yaml
- spec/exit/*.yaml
ordered_steps:
- 모든 매도 후보를 sell priority table에 먼저 넣는다.
- 손절, 수익보호, 이벤트 감액, 리밸런싱 매도를 우선순위로 선형화한다.
- tick normalization 후 가격과 수량을 산출한다.
- 다중 sell candidate가 있으면 단일 final sell action만 execution packet에 전달한다.
validation_commands:
- python tools/validate_order_grammar_v1.py || python tools/validate_specs.py
- python tools/validate_execution_precedence_lock_v1.py || python tools/validate_specs.py
acceptance_criteria:
- multi_condition_order_count == 0
- sell priority table present when candidates>=2
- tick normalization PASS
- single final execution action per ticker
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P11-T02
phase: P11_event_risk
title: 대형 IPO·거시 이벤트 선제 차익실현 모듈
status: DONE
completed_at: '2026-06-10'
completion_evidence: "validate_specs=PASS, macro_event_synchronizer_v2=PASS active_events=5"
objective: 우리 시장과 상관 높은 이벤트가 있을 때 사후 대응이 아니라 사전 감액 후보를 만든다.
target_files:
- spec/strategy/macro_event_synchronizer_v2.yaml
- spec/exit/event_response.yaml
- spec/exit/proactive_exit_radar.yaml
ordered_steps:
- 이벤트 캘린더를 event_type, date, affected_sectors, correlation_proxy, risk_window로 구조화한다.
- 보유종목별 event_beta 또는 sector proxy를 계산한다.
- risk_window 진입 시 profit_lock 또는 trim 후보를 shadow/live rule에 따라 생성한다.
- 실행 후 수익 반납 방지 효과를 T+5/T+20으로 평가한다.
validation_commands:
- python tools/validate_specs.py
- python tools/build_macro_event_synchronizer_v2.py || true
acceptance_criteria:
- event risk rows have provenance
- affected holdings mapped
- pre-event action candidate generated when rule triggers
- outcome feedback recorded
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
- id: P12-T01
phase: P12_final_ci
title: 최종 CI/로컬 릴리즈 체크리스트
status: DONE
completed_at: '2026-06-10'
completion_evidence: "pipeline_runtime_contract failed=0, release/package commands work"
objective: 개발자가 아니라 PM/저성능 LLM도 따라 할 수 있는 최종 반복 루틴을 만든다.
target_files:
- package.json
- spec/23_low_capability_llm_pipeline_todo.yaml
- README.md
ordered_steps:
- README에는 단 하나의 릴리즈 명령 세트를 남긴다.
- low_capability_llm_pipeline_todo에는 S0~S4와 completion criteria를 최신화한다.
- 모든 신규 작업은 change_request yaml을 통해 들어오게 한다.
- 완료 표시는 validation artifact 경로와 수치가 있을 때만 허용한다.
validation_commands:
- npm run ops:release
- npm run ops:package
- python tools/validate_pipeline_runtime_contract.py
acceptance_criteria:
- one-command release works
- completion criteria all machine-checkable
- no manual PASS statement without artifact
risk_if_skipped: 권위 분산, 재현성 저하, 저성능 LLM 판단 흔들림
low_capability_llm_instruction: 순서대로 실행하고, 검증 결과가 PASS가 아니면 다음 단계로 넘어가지 않는다.
low_capability_llm_execution_contract:
fixed_read_order:
- AGENTS.md
- runtime/active_artifact_manifest.yaml
- spec/00_execution_contract.yaml
- spec/02_data_contract.yaml
- spec/09_decision_flow.yaml
- spec/12_field_dictionary.yaml
- spec/13_formula_registry.yaml
- spec/45_number_provenance_contract.yaml
- spec/46_low_capability_execution_pack.yaml
- Temp/final_context_for_llm_v5.yaml or Temp/final_decision_packet_active.json
response_rule:
- 계산하지 않는다.
- 패킷에 있는 값만 복사한다.
- 패킷에 없는 숫자는 DATA_MISSING — 하네스 업데이트 필요로 표기한다.
- 하네스 final_action을 번복하지 않는다.
- blocked/limited 종목의 기준가·손절가·익절가·수량은 숨기지 않는다.
- 보고서 섹션 순서는 executive -> blockers -> action_table -> shadow_ledger -> data_missing -> education_notes로 고정한다.
edit_rule:
- 한 번에 하나의 phase만 수정한다.
- 수정 전 대상 파일과 acceptance criteria를 적는다.
- 수정 후 지정 validation 명령을 실행한다.
- 검증 실패 시 원인과 rollback path만 기록하고 성공으로 표시하지 않는다.
forbidden:
- 임의 가격 산출
- 임의 수량 산출
- 임의 평균/순위/점수 계산
- 하네스 action 변경
- deprecated artifact 참조
- --skip-validate로 실패 회피
- GAS에 신규 판단 로직 추가
release_commands:
baseline_audit:
- python tools/validate_specs.py
- python tools/validate_golden_coverage_100.py
- python tools/validate_calibration_registry_v1.py
- python tools/validate_schema_model_generation_v1.py
- python tools/validate_gas_thin_adapter_v1.py
- python tools/validate_agents_shrink_v1.py
- python tools/audit_repository_entropy_v2.py --out runtime/refactor_baseline_v_next.yaml
build_release:
- npm run ops:prepare
- npm run ops:release
- npm run ops:render
- npm run ops:package
strict_gate:
- python tools/run_release_dag_v3.py --mode release --strict
never_use:
- --skip-validate as default
- manual edit of Temp/*.json to force PASS
- manual override without shadow ledger
global_acceptance_criteria:
phase_0_to_2:
- schema/model generation gate PASS
- unimplemented formula count=0
- active_count_per_formula=1
- authority_collision_count=0
- stale_artifact_count=0
phase_3_to_5:
- forbidden_gas_business_logic_count=0
- renderer_calculation_count=0
- reverse_dependency_count=0
- number_provenance_coverage_pct=100
- no skipped validations in release mode
phase_6_to_8:
- expert_prior threshold count used in live decisions=0 or capped informational
- live/replay separation strict PASS
- T+20 dashboard generated
- low capability pack validation PASS
investment_quality_targets:
- 'prediction_match_rate_pct: raise from observed 54.76 toward 60+ first, then 65+ after calibration'
- 'profit_giveback_pct: tracked and decreasing for profitable trades'
- 'late_chase_loss_attribution: tracked weekly and decreasing'
- cash_floor_violation_count=0
pm_operating_cadence:
weekly:
- 토/일 rebalance_required=true 확인
- release DAG strict 실행
- T+5/T+20 outcome ledger 업데이트
- late-entry/premature-exit/profit-giveback 오답노트 작성
- 다음 주 risk budget와 cash floor 갱신
monthly_1_11_21:
- mid_check_required=true 확인
- calibration registry expert_prior 감소 현황 점검
- threshold promotion/retirement 회의
- 문서/파일 entropy budget 점검
event_driven:
- 대형 IPO, FOMC, CPI, 환율 급등, VIX 급등, 섹터 집중도 초과 시 proactive profit-taking/risk-off gate 실행