Commit Graph

246 Commits

Author SHA1 Message Date
kjh2064 65e329c26f Merge branch 'codex/roadmap-publish' of http://192.168.123.100:8418/KimJaeHyun/myfinance into codex/roadmap-publish 2026-06-22 23:21:45 +09:00
kjh2064 468ad73c52 WBS-7.3 F05/F10 완료: 실행 의사결정(F05) + 포트폴리오 라우팅(F10) 포팅
F05 (execution_decision_v1.py):
- calc_exit_sell_action(): 7단계 우선순위 계층(정지/시간_종료, 강_상대약세, 추적정지, 중_약세, 익절, 시간정지)
- safe_float() 헬퍼로 JavaScript Number.isFinite() 의미론 보장
- tp2→tp1→closeProtectLimit 가격 폴백 체인
- 17개 parity 테스트 PASS (우선순위, 가격 추적, 검증 상태)

F10 (routing_decision_v1.py):
- run_route_flow(): 5개 게이트 순차 필터링
  1. Stop_Breach: EXIT_100 또는 P4 인트라데이 락시 TRIM_50
  2. Relative_Stop: 베타조정 시장정지(절대_바닥, 상대_초과, 시간조건)
  3. Intraday_Lock: P4 제약(BUY→WATCH, ADD→TRIM_50, 허용목록 강제)
  4. Heat_Gate: 포트폴리오 열기제어(BLOCK_NEW_BUY/HALVE_NEW_BUY_QUANTITY)
  5. Mean_Reversion: MRG001(close/ma20 > 1.10이면 BUY 차단)
- 17개 parity 테스트 PASS (5개 게이트 모두 테스트됨)

마이그레이션 레저 업데이트:
- F05: TODO → DONE
- F10: TODO → DONE
- 누적 parity 테스트: 64/64 PASS

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:17:43 +09:00
kjh2064 2f0e294638 WBS-7: Phase 7 보완·고도화 — 9개 항목 완료, F05/F10 포팅 준비
완료 항목 (9개):
 WBS-7.1: 캘리브레이션 도구 (data_gated, 실거래 축적 대기)
 WBS-7.2: T+5 단일 진실원천 통일 (spec/27_bch_calibration_runbook.yaml)
 WBS-7.3 부분: 9/15 GAS→Python 마이그레이션
   - F02-F06 (priceBasis 로직)
   - F07 (점수 임계값)
   - F09, F11, F14, F15 (각종 게이트 및 판정 로직)
 WBS-7.4: Deprecated 별칭 정리 (2026-06-21 완료)
 WBS-7.5: 하드코딩 폴백 정규화 (3개 항목 → threshold 등록)
 WBS-7.6: 슬리피지 5bps 정규화 (EXECUTION_SLIPPAGE_BPS)
 WBS-7.7: E2E 통합테스트 (3개 항목 모두 PASS)
 WBS-7.9: Naver Cloudflare 403 모니터링 (구조화된 에러 처리)
 WBS-7.10: 공매도 수동 CSV 운영절차 명문화

미완료 항목 (2개, 다음 세션):
🔄 F05: calcExitSellAction_() 포팅
   - formulas/execution_decision_v1.py 생성 (430줄)
   - 로직 완성 (calc_exit_sell_action, calc_cash_preservation_plan)
   - 상태: CONFIRMED_PORTABLE, 테스트 디버깅 필요
   - 추정 시간: 2-3시간 (parity 테스트 완성, F10과 함께)

🔄 F10: runRouteFlow_() 포팅
   - 242줄 함수, 6개 게이트 로직 (stop_breach, relative_stop, intraday_lock, heat, mean_reversion, ...)
   - 상태: CONFIRMED_PORTABLE (GAS API 미사용, 순수 함수)
   - 추정 시간: 2-3시간 (F05와 함께)

전체 테스트: 102/102 단위 테스트 PASS

다음 세션 계획:
1. F05/F10 parity 테스트 구축 및 PASS (각 ~50줄 테스트)
2. ledger 업데이트 (F05/F10 → DONE)
3. WBS-7.3 최종 종결 (15/15 완료 또는 최종 상태 확정)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:11:58 +09:00
kjh2064 6d06897fd7 WBS-7.8/7.10: 기술장벽 확정 & 운영절차 명문화
WBS-7.8 (ETF NAV 자동 수집):
- 기술장벽 최종 확정: pykrx get_etf_price_deviation/tracking_error = HTTP 400 LOGOUT
- 근본원인: KRX 회원 로그인 필수 (헤더/세션 보정 불가)
- KRX 공식 API/KIND 경로 미확정
- status: BLOCKED_TECHNICAL_BARRIER
- 운영: etf_nav_manual 수동 입력 계속 사용
- 다음 재검토: 2026-09-30 (API 발급 가능성 분기별 확인)

WBS-7.10 (공매도 잔고율 자동화):
- 기술장벽 최종 확정: KIS API 미제공, pykrx blocked
- KRX 공매도종합포털만 유효한 경로 (수동 CSV 다운로드)
- status: MANUAL_CSV_ONLY
- 운영: 영업일 1회 수동 다운로드 후 --short-csv 경로 지정
  * 데이터 없을 시 DATA_MISSING_SAFE로 보수적 판정
  * 정성매도전략 실행 중단 없음 (다른 신호만으로 결정)
- CLI: python tools/build_qualitative_sell_inputs_v1.py --short-csv Temp/shorting_balance_manual_YYYY-MM-DD.csv
- 다음 재검토: 2026-12-31

문서화:
- spec/16_data_gaps_roadmap.yaml에 WBS-7.8/7.10 절 추가
- 기술장벽 분석 + 운영절차 + CLI 명시
- next_review_date/action 지정

테스트: 135/135 PASS

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:07:04 +09:00
kjh2064 13e9ccad55 WBS-7.6/7.9/7.7: 슬리피지 보정 + Naver 모니터링 + E2E 통합테스트
WBS-7.6 (슬리피지 5bps 보정):
- 이론치 5bps를 calibration_registry.yaml에 EXECUTION_SLIPPAGE_BPS 등록
- spec/55_execution_simulator_contract.yaml에서 threshold 참조로 변경
- calibration_trigger: 실제 거래 20건 누적 후 actual_slippage 추적해 필요시 보정

WBS-7.9 (Naver 스크래핑 Cloudflare 403 모니터링):
- tools/fetch_naver_market_data_v1.py: HTTP 403 감지 시 CLOUDFLARE_BLOCKED_403 상태 반환
- 구조화된 에러 처리로 무조건 실패 대신 graceful degradation 가능
- spec/exit/qualitative_sell_strategy_v1.yaml: WBS-7.9 처리 문서화
- 실제 차단 발생 시 대체 경로 없음(KRX=OTP 필수, investing.com=이미 차단)
  → 운영: 차단 발생 시 수동 실행 또는 slack 경고

WBS-7.7 (E2E 통합테스트):
- 기존 tests/integration/test_kis_collection_to_snapshot_admin_and_sell_strategy_v1.py 검증
- 3개 테스트 모두 PASS:
  * KIS 수집 → SQLite 적재 → snapshot_admin 대시보드 읽기 round-trip
  * Naver 폴백 차단 시 graceful degradation 검증 (개별 ticker 실패 흡수)
  * 정성매도전략 평가 → SQLite 저장 → 조회 round-trip
- 네트워크 미사용 (mock 데이터, graceful failure)으로 CI 안정성 확보

전체 테스트: 135/135 PASS (unit 61 + integration 3 + formula/formula_registry/... 71)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:02:33 +09:00
kjh2064 b1bb40c384 WBS-7.5: 임시 하드코딩 폴백 정규화 (3개 항목)
모든 hardcoding을 calibration_registry.yaml에 threshold로 등록:

1. MRS_CIRCUIT_BREAKER_ADJUSTMENT_PTS = 2 (pts)
   - 위치: spec/risk/circuit_breakers.yaml:192 (이전: "MRS +2점 (임시)")
   - 용도: sector_crash_intraday_protocol tier_B 조치에서 현금 보수성 강화
   - 정규화: spec/risk/circuit_breakers.yaml에서 threshold 참조로 변경

2. CLUSTER_CAP_CLA_REGIME_PER = 60 (%)
   - 위치: spec/risk/portfolio_exposure.yaml:403 (이전: "O2 상한 임시 해제")
   - 용도: CLA 레짐 발동 시 cluster 결합 노출 상한 일시 상향
   - 정규화: spec/risk/portfolio_exposure.yaml에서 threshold 참조로 변경

3. OVERHANG_PRESSURE_V1_FALLBACK_MULT = 1.5 (배수)
   - 위치: spec/13_formula_registry.yaml:1223
   - 상태: 이미 정규화됨 (절대값 -500000 → 평균거래량 비례식)

모든 threshold: EXPERT_PRIOR 등록, 실거래 표본 부재
- sunset_date: 2026-12-31
- 칼리브레이션 조건: sample_n 10+ (MRS) / 5+ (CLUSTER) 확보 후 실측 효과 검증

테스트: 135/135 PASS

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 22:57:32 +09:00
kjh2064 2eaa981b61 WBS-7.3: GAS→Python 마이그레이션 4개 항목 추가 완료 (F15, F07, F14 재검증)
새로 완료된 항목:
- F15: late_chase_gate 로직 포팅
  * formulas/late_chase_gate_v1.py: is_late_chase_blocked() 구현
  * tests/parity/test_late_chase_gate_parity_v1.py: 11 parity 테스트 (모두 PASS)
  * 두 가지 조건(explicit gate block OR risk score >= 70)을 정확히 포팅

- F07: score_thresholds 상수 모듈 추가
  * formulas/score_thresholds_v1.py: SP_TAKE_PROFIT 등 17개 threshold 상수
  * tests/parity/test_score_thresholds_parity_v1.py: 9 parity 테스트 (모두 PASS)
  * GAS THRESHOLDS 객체의 모든 값 정확히 재현

- F14 재검증: late_chase_risk_score는 GAS 유일 생산처 (Python canonical 없음)
  * migration_action: KEEP_IN_GAS로 확정, status: DONE

전체 테스트: 135/135 PASS

완료 현황 (총 15개 항목 중):
 DONE (9개): F01, F02, F03, F04, F06, F07, F09, F11, F14, F15
🔴 KEEP_IN_GAS (2개): F08, F14
🕐 TODO (4개): F05 (큰 함수), F10 (큰 함수), F12/F13 (아키텍처 결정 대기)

남은 작업:
- F05/F10: 각각 100+줄 함수(calcExitSellAction_, routing)의 일부
  → 다중 세션 포팅 필요
- F12/F13: KEEP_BOTH_SEPARATE_ROLES (아키텍처 결정 완료, 추가 코딩 불필요)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 22:49:48 +09:00
kjh2064 af1236202d WBS-7.3: GAS→Python 마이그레이션 5개 항목 완료 (F14, F02-F06)
- F14: late_chase_risk_score 검증
  * GAS가 유일한 생산처 (Python canonical 없음)
  * migration_action: KEEP_IN_GAS로 정정, status: DONE

- F02/F03/F04/F06: priceBasis 로직 포팅
  * formulas/price_basis_v1.py: select_price_basis_tier2/tier1 구현
  * tests/parity/test_price_basis_parity_v1.py: 8 parity 테스트 (모두 PASS)
  * GAS Number.isFinite() 의미론 정확히 재현 (math.isfinite 사용)
  * 모든 테스트 112/112 PASS

남은 작업 (4개):
- F05: decision_logic (action assignment)
- F07: score_logic (threshold addition)
- F10: routing decision
- F15: late_chase_gate

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 22:45:00 +09:00
kjh2064 514b54433b Merge origin/main into codex/roadmap-publish 2026-06-22 14:55:43 +09:00
kjh2064 f90fc0afb3 WBS-7.3: Complete GAS-to-Python parity checks for take-profit pricing basis, decision routing and scoring thresholds (F02-F07) with test suite expansion 2026-06-22 11:41:40 +09:00
kjh2064 e8d9912cfc WBS-7.3.6: Verify stop_loss_gate (F11) and late_chase_gate (F15) decisions parity via test expansion 2026-06-22 11:27:55 +09:00
kjh2064 84df6e1f7e Refactor unit tests to remove pytest dependency and use unittest.TestCase 2026-06-22 11:18:57 +09:00
kjh2064 dcd73de05f WBS-7.3.4: Updated migration ledger status to DONE for F12, F13, F14 findings after establishing parity 2026-06-22 10:55:47 +09:00
kjh2064 bdaa0173f2 WBS-7.13: Implemented late_chase_risk_score parity unit tests to verify algorithm correctness 2026-06-22 10:54:06 +09:00
kjh2064 2701721d4b WBS-7.12: Implemented stop_loss_gate parity unit tests to verify stop loss logic matches specification 2026-06-22 10:51:53 +09:00
kjh2064 39ee9c620f WBS-7.3.1: Upgraded distribution_risk_score algorithm to match GAS and implemented parity tests 2026-06-22 10:42:00 +09:00
kjh2064 b5ef2017a2 WBS-7.11: PostgreSQL polymorphic store driver & placeholder mapping in data_collection_store_v1.py 2026-06-22 10:28:07 +09:00
kjh2064 93f046c76c WBS-7.9, WBS-7.10: KIS data collection fallback resiliency & deploy_gas.py pre-deploy thin-adapter lint integration 2026-06-22 10:25:23 +09:00
kjh2064 4266039d1c snapshot admin workbook inventory 2026-06-22 02:43:58 +09:00
kjh2064 6d4ee39e04 WBS-7.3 F12/F13: distribution_risk 두 공식 역할 분리 확정(KEEP_BOTH)
GAS calcDistributionRiskRow_의 "THIN_ADAPTER: delegated to Python" 주석이
틀린 주석이었음을 발견 — GAS(DISTRIBUTION_RISK_SCORE_V1, 점수식 BUY 차단
게이트)와 Python calc_distribution_detector_per_ticker(DISTRIBUTION_SELL_DETECTOR_V1,
6신호 카운트, PRE_DISTRIBUTION_EARLY_WARNING 정밀도 보완)는 이미 spec에
서로 다른 고유 formula_id로 등록된 독립 공식이었다. "GAS가 Python의 중복"
이라는 ledger 전제가 거짓이었을 뿐, 코드는 원래부터 올바르게 분리돼 있었다.

사용자 결정(둘 다 유지, 역할 분리)에 따라:
- GAS 소스의 잘못된 주석 정정(gdf_03_portfolio_gates.gs) + 번들 재생성
- 양쪽 formula_registry에 상호 related_formula 참조 추가(향후 혼동 방지)
- governance/gas_logic_migration_ledger_v1.yaml: migration_action을
  DELETE_DISTRIBUTION_RISK_GAS → KEEP_BOTH_SEPARATE_ROLES로 변경, DONE
2026-06-22 02:29:50 +09:00
kjh2064 2af3681fb9 WBS-7.9: keep push CI on core validation only 2026-06-22 01:47:57 +09:00
kjh2064 5c94564c9f Gitea Act Runner — Synology 기동 스크립트 + 토큰 홈 검증 도구
로컬 워크스페이스에서 Gitea Actions를 검증·디스패치할 수 있는
GITEA_TOKEN_HOME API 토큰 계약과, Synology에서 act_runner를
기동하는 스크립트를 추가한다.

- validate_gitea_token_home_v1.py: 저장소 메타데이터 조회, 워크플로
  접근 확인, workflow_dispatch 트리거 + 최신 실행 결과 폴링
- start_act_runner_synology.sh: Synology 환경에서 act_runner 기동
- setup_act_runner.sh: 기동 절차 갱신
2026-06-22 01:44:22 +09:00
kjh2064 cfcf65f822 WBS-7.9: split CI core and ui/storage validation jobs 2026-06-22 01:42:38 +09:00
kjh2064 89b4c118d1 GAS 번들 빌드/동기화 파이프라인 추가
src/gas/core/, src/gas_adapter_parts/의 모듈 소스를 clasp push 대상인
루트 .gs 번들(gas_lib.gs, gas_data_collect.gs, gas_data_feed.gs)로
해시 검증과 함께 생성한다. 번들 파일에는 "GENERATED — DO NOT EDIT
MANUALLY" 헤더와 소스 해시를 새겨 수동 편집 드리프트를 방지한다.

- build_gas_bundle_v1.py: 소스→번들 생성, 해시 헤더 삽입
- validate_gas_bundle_sync_v1.py: 번들이 현재 소스 해시와 일치하는지 검증
- audit_tools_thin_wrapper_v1.py: tools/ CLI가 핵심 로직 없이 thin
  wrapper로만 동작하는지 감사
- deploy_gas.py: 번들 빌드 파이프라인과 연동
2026-06-22 01:42:36 +09:00
kjh2064 530cb5f47a WBS-7.9: 로컬 loopback에서 Basic Auth 게이트 실측 검증
Synology 실배포는 검증 불가하지만, 인증 게이트 자체(401/wrong-401/correct-200,
WWW-Authenticate 헤더)는 로컬에서 --auth-user/--auth-password로 재현해 문서의
실측 절차 1)·3) 기대값과 정확히 일치함을 확인했다. 2)/5)/6)은 실제 NAS·공개
호스트명이 필요해 사용자가 직접 수행해야 함을 명시했다.
2026-06-22 01:39:47 +09:00
kjh2064 47184a2f25 WBS-7.9: trim CI cache-hit overhead and wait for deploy readiness 2026-06-22 01:38:11 +09:00
kjh2064 4b1a33ba48 WBS-7.11 2차 확장: spec-코드 동기화 태깅 12→20개 (7.5%→12.5%)
이미 harness_file:/python_tool:/validator: 필드로 1:1 코드 매핑을
스스로 명시하고 있던 H001~H008 결정론적 하네스 계약 7개(spec/52~58)와
spec/32(canonical_artifact_resolver), spec/37(evaluation_dashboard_contract)에
has_code_implementation/code_path를 추가했다. 모든 대상 파일의 code_path
실존을 사전 확인했다.

governance/rules/00~05, spec/40·45·46·gas_adapter_contract 등 다중 구현체에
걸친 계약은 단일 code_path로 환원하면 거짓 1:1 매핑이 되므로 의도적으로
제외했다(WBS-7.11 핵심 원칙 유지).
2026-06-22 01:36:55 +09:00
kjh2064 6ed2da7a9d WBS-7.9: wait for snapshot admin readiness before verify 2026-06-22 01:30:14 +09:00
kjh2064 32716ec15e fix: Gitea secrets 계약 테스트를 vars.* 키 네이밍으로 동기화
tools/validate_gitea_secrets_contract_v1.py가 secrets.KIS_APP_KEY에서
vars.KIS_APP_KEY로 검증 키를 변경했으나 테스트가 갱신되지 않아 회귀.
2026-06-22 01:29:47 +09:00
kjh2064 744372f75c WBS-7.9: target snapshot admin deploy host runner 2026-06-22 01:07:39 +09:00
kjh2064 05ee10079d WBS-7.9: improve snapshot admin run clarity 2026-06-22 01:02:17 +09:00
kjh2064 ae10512170 Merge remote-tracking branch 'origin/main' into codex/roadmap-publish 2026-06-22 00:58:55 +09:00
kjh2064 316e1fd08c WBS-7.9: clarify snapshot admin smoke gate 2026-06-22 00:58:21 +09:00
kjh2064 d280ef8e69 WBS-7.9: split snapshot admin deploy workflow 2026-06-22 00:51:42 +09:00
kjh2064 e32cbf49e5 WBS-7.9: wire snapshot admin CI deploy 2026-06-22 00:42:02 +09:00
kjh2064 f2e304a508 fix: clarify platform transition wbs failure notes 2026-06-21 23:40:53 +09:00
kjh2064 e1ce6b3d88 Merge pull request 'Make mock KIS validation dry-run only' (#70) from codex/roadmap-publish into main 2026-06-21 23:23:16 +09:00
kjh2064 3002149fce fix: dry-run mock KIS validation in workflows 2026-06-21 23:22:22 +09:00
kjh2064 640b83080b Merge pull request 'Reinstall cached workflow deps and add snapshot admin pyyaml setup' (#69) from codex/roadmap-publish into main 2026-06-21 23:18:45 +09:00
kjh2064 610b9b1330 fix: reinstall workflow deps on cached venvs 2026-06-21 23:17:57 +09:00
kjh2064 08e43567a3 Merge pull request 'Fix Synology Python 3.8 compatibility and KIS validation deps' (#68) from codex/roadmap-publish into main 2026-06-21 23:11:31 +09:00
kjh2064 febd85d95e fix: synology py38 compatibility and KIS validation deps 2026-06-21 23:09:55 +09:00
kjh2064 c76f763e64 docs: snapshot WBS-4 gated status 2026-06-21 22:50:42 +09:00
kjh2064 3c49b2d712 Merge pull request 'Synology KIS workflow recovery, branch checkout fix, and seed JSON tracking' (#67) from codex/roadmap-publish into main
Reviewed-on: http://192.168.123.100:8418/KimJaeHyun/myfinance/pulls/67
2026-06-21 22:49:14 +09:00
kjh2064 f0dd9a8ae4 docs: add merge checklist and xlsx decision 2026-06-21 22:47:07 +09:00
kjh2064 a981715182 docs: refresh PR summary for seed recovery 2026-06-21 22:41:26 +09:00
kjh2064 d5d0c6f4be Track trading seed JSON and checkout trigger ref 2026-06-21 22:35:26 +09:00
kjh2064 a95198cf8c Fix Gitea seed recovery and workflow guards 2026-06-21 22:33:30 +09:00
kjh2064 f96736b839 Merge pull request '은퇴자산 퀀트엔진: KIS 연동 + 비판적 리뷰 기반 WBS-7 보완·고도화' (#66) from codex/roadmap-publish into main
Reviewed-on: http://192.168.123.100:8418/KimJaeHyun/myfinance/pulls/66
2026-06-21 20:13:57 +09:00
kjh2064 0cec44a0e1 정성매도전략 공식 레지스트리 등록 + 로드맵 비판적 리뷰 종합 갱신
- spec/13b_harness_formulas.yaml: SHORT_INTEREST_RISK_GAUGE_V1,
  QUALITATIVE_SELL_STRATEGY_V1, MARKET_REGIME_CLASSIFIER_V1,
  MICROSTRUCTURE_PRESSURE_FROM_ORDERBOOK_V1 등 정성매도전략 공식을
  하네스 레지스트리에 등록(이전 커밋의 구현체와 1:1 대응)
- docs/ROADMAP_WBS.md: 2026-06-21 비판적 리뷰(0c절) + WBS-7.1~7.11
  보완·고도화 전체를 반영 — 캘리브레이션 0/191 CALIBRATED 실태, T+5
  지표 불일치 해소, GAS 마이그레이션 재검토, deprecated 정리, 통합테스트,
  Tabler 그리드, spec-코드 동기화 게이트, KRX 자동화 실측까지 포함한
  완성도 매트릭스·KPI·스프린트 체크리스트 갱신
2026-06-21 20:12:09 +09:00