Files
kis_bot/.cursor/rules/verify-before-conclude-cross-strategy.mdc
Your Name b5d7c5d848 fix(옵투나·백테웹): 휩쏘 키 통일 + 엔진 뱃지 + 잡 삭제 + race·후처리 시그니처
휩쏘 키 통일 (bt-form-postfilter-key-parity.mdc 신설)
- 저장키 vs 조회키 불일치 해소: whipsaw_enabled(옛) → whipsaw_filter_enabled(표준)
- backtest_web.py: params[..] 세팅, static/js/backtest.js: 폼 파라미터
- optuna_web_jobs·param_search_apply_snapshot·param_search_scalping: 옛 alias 제거
- bt_post_filters: 로컬 변수도 whipsaw_filter_enabled 로 통일
- scripts/scratch: 관련 스크립트 동기 반영

엔진 뱃지 (optuna-job-engine-label.mdc 신설)
- optuna_web_jobs: use_rust 명시값만 신뢰, 미상은  (전략명 하드코딩 폴백 금지)
- 스캘핑/모멘텀/돌파 Rust 포팅 확장에도 안전한 라벨링

Optuna 웹 잡 UX
- save_job: tmp 파일 PID 접미 (멀티 프로세스 race 해소)
- _spawn_job_reaper: mode_refine 완료 시 phase1/phase2 JSON 자동 등록
  → 예전 UX 복원 (실행 잡ID 위에 결과 잡ID 노출)
- delete_job / delete_jobs_bulk 신설 + API + UI 삭제 버튼
  실행 중 잡 거부, 로그·원본 결과 JSON 보존

후처리 시그니처 수정
- bt_post_filters.orderbook_reject_for_entry 호출:
  price= → current_price=, 단일 대입 → 튜플 unpack
  (매 trial 마다 TypeError 삼켜지고 후처리 무효화되던 버그)

버그 조사·룰 강화
- verify-before-conclude-cross-strategy.mdc: 함수 추적 딥다이브 → 근본 대안 3개
- .cursorrules: 룰 27~29 추가 (해외 UI 정합·휩쏘 키·엔진 뱃지)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 19:23:22 +09:00

67 lines
4.1 KiB
Plaintext

---
description: 버그=딥다이브 후 근본원인·3안 제시 · 추측 금지 · 타전략 교차검증
alwaysApply: true
---
# 가설 검증 · 버그 딥다이브 · 전략 교차검증
이 대화에서 실제로 낭비된 패턴: **가설만 말하고 값 패치로 끝내기**, **추측성 대안 나열**, **한 전략만 보고 타전략 동일 이슈 미검사**.
## 1. 추측·가설로 답변 금지
- “아마 ~일 것”, “~로 보인다”만으로 **근본원인이라고 단정·보고하지 말 것**.
- 가설을 세웠으면 **검증 단계까지 끝낸 뒤**에만 답한다.
1. 증상 → 가설 목록 (짧게)
2. **증거로 검증** (DB·job 메타·저널·로그·코드 경로 실측)
3. 기각된 가설 / 확정된 원인 분리
4. 그다음에야 수정·운영 조치
- 검증에 쓴 증거(테이블·파일·시각·수치)를 보고에 **짧게** 남긴다. 없으면 “미확인”이라고 쓰고 단정 금지.
- CRITICAL §5(근본원인 먼저)와 동일 정신. 값만 고치고 “고쳤다”고 하지 말 것.
## 2. 버그 발견 시 — 함수 추적 딥다이브 → 근본 3안 (필수)
버그·이상 수치·정합 깨짐을 발견하면 **즉시 패치하지 말고** 아래를 끝낸 뒤 보고한다.
**오래 걸려도 된다.** 짧은 추측 턴을 여러 번 돌리는 토큰 낭비를 금지하고, **한 번에 구석구석 분석**한다.
### 2-1. 분석 (코드 근거 없이 대안 금지)
1. 증상 진입점(로그 시그니처·함수명·콜사이트)을 확정한다.
2. 해당 함수를 **호출 체인 따라** 읽는다 (호출자 → 피호출 → 공유 헬퍼/캐시/DB/WS).
3. 분기·기본값·env·None/빈값·재시도·락·전략별 분기까지 **구석구석** 대조한다.
4. 실측 증거(코드 라인·로그·DB/스키마)로 **근본원인 1개**를 확정한다. 미확정이면 “미확인” + 다음에 볼 경로만 적고 **대안·수정 금지**.
### 2-2. 보고 — 근본적인 대안 정확히 3개
근본원인 확정 **후에만**, 땜빵이 아닌 **근본 해결안 3개**를 제시한다.
| 안 | 내용 (필수) |
|----|-------------|
| 대안 A/B/C | 무엇을 어디서 고치는지 (파일·함수) |
| 각 안 | 왜 근본원인에 닿는지 · 실매/백테/타전략 부작용 · 리스크 |
| 추천 | 3안 중 1개를 고르고 이유 1~2문장 |
- **금지**: 코드 미추적 추측 대안, “일단 값만 바꾸기/재시도 늘리기/±1 보정” 류 증상 가리기, 근거 없는 4안 이상 나열.
- **필수**: 선보고 → 사용자 승인 후 수정 (핵심 매매/인프라는 `.cursorrules` 선수정 원칙과 동일).
## 3. 한 전략 수정·사고 조사 시 → 타전략 교차검증 (필수)
전략 A(꼬리/모멘텀/돌파/스캘핑 등)에서 버그·잘못된 apply·단위·UI를 찾거나 고쳤으면, **보고 전에** 같은 종류의 위험이 B·C에도 있는지 검사한다.
| 사고 유형 | 교차로 볼 것 |
|-----------|----------------|
| Optuna `mode`/`learn`/`gated` 적용 | 최근 `logs/optuna_web_jobs/*.json` 의 `applied_source` · config_* 스냅샷 |
| %↔분율 변환 | 해당 전략 `apply_params_to_db` + 웹 `pct_ui` |
| 후처리/호가/휩쏘 패치 | 전략별 `build_upto_env_patch` 지원 여부 |
| 웹 폼·summary 키 | 국장 대응 탭 동일 UX (해외는 domestic-port 룰) |
- “스캘만 문제”라고 **교차 없이** 말하지 말 것.
- 타전략이 정상이면 **검사한 증거**(예: 마지막 apply=gated#1, live 값=trial params)를 한 줄씩 적는다.
- 타전략도 동일/유사면 **잔여 위험**으로 명시하고, 사용자 승인 없이 일괄 값 패치하지 말 것.
## 4. Optuna 적용 추적 (감사)
- HTTP access 로그만으로는 body(`source=mode`)가 안 남을 수 있음.
- 1차 추적: `logs/optuna_web_jobs/<job_id>.json` → `applied_at` / `applied_source` / `applied_rank` / `applied_trial` / `applied_upto`
- 2차: `config_*` 행 `created_at` + `optuna_study_result.payload_json` 의 `mode_combo` / `results_gated` 수치 대조
- 파일 `results/*.json` 은 복사본. **DB `optuna_study_result` + job 메타**를 우선.