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