# 🚀 Quant Engine v9 Deployment Checklist

**상태**: 2026-06-25 배포 준비 완료  
**목표**: honest_proof_score 56.57 → 95.0  
**기간**: 6주 (2026-06-25 ~ 2026-08-10)

---

## ✅ Phase 0: 사전 준비 (완료)

### 코드 구현
- [x] **P3 손절 체계** — `spec/exit/stop_loss.yaml`
  - calcAbsoluteRiskStopV1_
  - calcRelativeUnderperfAlertV1_
  - calcStopActionLadderV1_

- [x] **P4 라우팅** — `spec/xx_routing_contract.yaml`
  - buildRoutePacket_ (SCALP/SWING/MOMENTUM/POSITION)

- [x] **P5 뒷북 차단** — `spec/exit/pre_distribution_gate.yaml`
  - calcAlphaLeadV1_
  - calcDistributionRiskV1_

- [x] **P6 현금확보** — `spec/exit/cash_recovery.yaml`
  - calcCashRecoveryOptimizerV1_

### UI/UX
- [x] MudBlazor 6.10.0 추가 (QuantEngine.Web.csproj)
- [x] Dashboard.razor — Material Design 레이아웃
- [x] MainLayout.razor — 반응형 AppBar + Drawer
- [x] NavMenu.razor — Material Icons 네비게이션
- [x] App.razor — MudThemeProvider 통합

### 빌드
- [x] Release 빌드: `dotnet publish -c Release`
- [x] 결과: `src/dotnet/QuantEngine.Web/publish/` (24MB, 172개 파일)
- [x] 모든 컴파일 에러 해결

---

## 🚀 Phase 1: 배포 (지금 진행)

### 1.1 웹 서버 배포

```bash
# 실행 방법
chmod +x deploy.sh
./deploy.sh
```

**배포 스크립트 단계:**
- [ ] SSH 연결 확인 (178.104.200.7)
- [ ] 원격 백업 생성 (`/var/www/quant_backup_*`)
- [ ] 파일 전송 (rsync, 24MB)
- [ ] 권한 설정 (www-data:www-data)
- [ ] nginx 재시작
- [ ] HTTP 상태 확인 (200 OK)

**확인 URL:**
```
http://178.104.200.7/quant/
```

### 1.2 GAS 배포

#### Step 1: Google Apps Script 프로젝트 생성
```
1. Google Drive → 새로 만들기 → Google Apps Script
2. 프로젝트명: "Quant Engine Data Feed"
3. 스크립트 저장
```

#### Step 2: 함수 추가
```javascript
// 다음 파일들의 내용을 복사해서 GAS에 붙여넣기:
// - src/google_apps_script/gas_data_feed.gs (P3~P6 함수)
// - src/google_apps_script/live_outcome_ledger.gs (신호 추적)
```

#### Step 3: 스프레드시트 연동
```
1. 새 스프레드시트 생성: "live_outcome_ledger"
2. LEDGER_SHEET_ID 변수 업데이트 (live_outcome_ledger.gs)
3. initializeLedger_() 실행 → 헤더 자동 생성
```

#### Step 4: 테스트
```javascript
// GAS 콘솔에서 실행
testLiveOutcomeLedger();

// 또는 개별 테스트
testP3Functions();
```

**체크리스트:**
- [ ] GAS 프로젝트 생성 완료
- [ ] gas_data_feed.gs 파일 추가 (7개 함수)
- [ ] live_outcome_ledger.gs 파일 추가 (신호 추적)
- [ ] LEDGER_SHEET_ID 설정 (스프레드시트 ID)
- [ ] initializeLedger_() 실행
- [ ] 테스트 함수 통과

### 1.3 데이터베이스 연결 확인

```bash
# SSH 접속 후
ssh kjh2064@178.104.200.7

# PostgreSQL 연결 확인
psql -h 127.0.0.1 -U gitea -d giteadb
```

**체크리스트:**
- [ ] PostgreSQL 실행 중
- [ ] giteadb 데이터베이스 존재
- [ ] quantengine schema 존재

---

## 📊 Phase 2: 실전 운영 (6주)

### Week 1-2: 기초 구축 (2026-06-25 ~ 2026-07-08)

**목표**: 6-8개 신호 수집

**매일 해야 할 일:**
- [ ] 신호 발생 → `addSignal_(signal)` 호출
- [ ] 또는 스프레드시트 "live_outcome_ledger"에 직접 입력

**주간 금요일 (매주):**
- [ ] `calculateStats_()` 실행
- [ ] win_rate 확인 (목표: >= 60%)
- [ ] 주간 리포트 작성 (docs/DAILY_SIGNAL_TRACKING.md 참고)

**체크리스트:**
- [ ] Week 1: 3-4개 신호
- [ ] Week 2: 3-4개 신호 (누적 6-8개)
- [ ] 승률 >= 50% 유지

### Week 3-4: T+20 수집 (2026-07-09 ~ 2026-07-22)

**목표**: 추가 8-10개 신호 + T+20 데이터 수집 시작

**매일:**
- [ ] 신규 신호 기록
- [ ] T+20 도달한 신호 `updatePriceT20_(signalId, priceT20)` 호출

**T+20 가격 수집:**
```python
# KIS API, Yahoo Finance 등에서 자동 수집
# 또는 수동으로 스프레드시트 입력

# 자동으로 계산됨:
# - return_pct_t20
# - outcome (WIN/LOSS/BREAKEVEN)
# - win_margin
# - validation_status: PROVISIONAL
```

**체크리스트:**
- [ ] Week 3: 4-5개 신호
- [ ] Week 4: 4-5개 신호 (누적 14-18개)
- [ ] T+20 데이터 6-8개 수집
- [ ] 완료된 신호 승률 >= 60%

### Week 5-6: 데이터 수렴 (2026-07-23 ~ 2026-08-05)

**목표**: 추가 8-10개 신호 + 30개 근처

**매일:**
- [ ] 신규 신호 기록
- [ ] T+20 데이터 입력 (완료)

**대량 수렴:**
```javascript
// 주간 실행
stats = calculateStats_();
Logger.log(`승률: ${stats.win_rate}%, 완료: ${stats.completed}/30`);
```

**체크리스트:**
- [ ] Week 5: 4-5개 신호
- [ ] Week 6: 4-5개 신호 (누적 22-28개)
- [ ] 전체 승률 >= 60%

### Week 7: CALIBRATED 전환 (2026-08-06 ~ 2026-08-10)

**목표**: 30개 완료 + CALIBRATED 전환

**최종 신호:**
- [ ] 마지막 2-8개 신호 수집
- [ ] T+20 데이터 완료

**CALIBRATED 전환 실행:**
```javascript
// 조건 확인
check = checkCalibrationReady_();
Logger.log(JSON.stringify(check, null, 2));

// 조건 충족 시
calibrateIfReady_();
```

**체크리스트:**
- [ ] 신호 누적: 30개 완료
- [ ] 승률: >= 60% (30개 중 최소 18개 WIN)
- [ ] avg_win_margin >= 2.0%
- [ ] PROVISIONAL → CALIBRATED 전환
- [ ] honest_proof_score 업데이트 (95.0 달성)

---

## 🎯 최종 목표

### honest_proof_score 개선

```
현재:        56.57
├─ P0 완료:  +10점 → 66.57
├─ P2 샘플:  +20점 → 86.57
└─ P3~P6:    +8점  → 94.57 ≈ 95.0 ✅
```

### 배포 완료 조건

- [x] Release 빌드 성공
- [x] 명세 파일 (P3~P6 YAML)
- [x] GAS 함수 구현 (7개)
- [x] 배포 스크립트 작성
- [x] 신호 추적 시스템 (GAS)
- [ ] 웹 서버 배포 실행
- [ ] GAS 프로젝트 배포 실행
- [ ] 30개 신호 수집 (6주)
- [ ] CALIBRATED 전환
- [ ] honest_proof_score 95.0 달성

---

## 📝 추가 작업

### 배포 후 확인

```bash
# 웹사이트 접속
curl -I http://178.104.200.7/quant/

# 로그 모니터링
ssh kjh2064@178.104.200.7
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

# 백업 위치
/var/www/quant_backup_YYYYMMDD_HHMMSS/
```

### 문제 해결

| 문제 | 해결법 |
|------|--------|
| HTTP 503 | 앱이 시작 중. 몇 초 후 재시도 |
| HTTP 404 | nginx 설정 확인 (`/etc/nginx/sites-available/quant`) |
| SSH 연결 실패 | SSH 키 확인 (`~/.ssh/id_ed25519`) |
| 성능 저하 | 데이터베이스 연결 확인, 로그 분석 |

### 모니터링

```bash
# 일일 헬스 체크 (cron)
0 9 * * * curl http://178.104.200.7/quant/ > /dev/null 2>&1

# 주간 리포트 (GAS 자동화)
# 매주 금요일 18:00 실행:
# - calculateStats_()
# - 이메일 발송
```

---

## 🔗 관련 문서

- `V9_HARDENING_IMPLEMENTATION_ROADMAP.md` — 전체 로드맵
- `docs/DAILY_SIGNAL_TRACKING.md` — 일일 추적 가이드
- `deploy.sh` — 배포 스크립트
- `src/google_apps_script/gas_data_feed.gs` — GAS 함수
- `src/google_apps_script/live_outcome_ledger.gs` — 신호 추적

---

**작성일**: 2026-06-25  
**최후 수정**: 2026-06-25  
**다음 체크**: 2026-07-04 (Phase 2 Week 1 마감)
