# Phase 6 테스트 체크리스트

## 1. 단위 테스트

### Broker Adapter
- [ ] health/account/positions/open orders 조회가 contract대로 직렬화된다.
- [ ] raw broker status가 canonical status로 올바르게 매핑된다.
- [ ] timeout / network / auth / rate limit 예외가 내부 오류 타입으로 매핑된다.

### Risk Guard
- [ ] buying power 부족 시 `deny`
- [ ] daily loss 초과 시 `deny`
- [ ] data freshness breach 시 `defer` 또는 `deny`
- [ ] degraded mode level별 허용 범위가 다르게 적용된다.

### Approval Workflow
- [ ] ticket 생성/승인/거절/만료 상태 전이가 맞다.
- [ ] 승인 없는 주문은 제출되지 않는다.
- [ ] 수정 허용 범위를 벗어난 operator action은 거부된다.

### State Machine
- [ ] accepted -> partial fill -> filled 전이
- [ ] accepted -> cancel_requested -> cancelled 전이
- [ ] partial fill 후 cancel 전이
- [ ] submit timeout 후 reconciliation 대기 상태 전이
- [ ] reject / expire / bust 전이

## 2. 통합 테스트

- [ ] dry-run 모드에서 order plan만 생성되고 브로커 호출이 없다.
- [ ] paper 모드에서 submit -> fill -> position open -> time exit 흐름이 끝까지 실행된다.
- [ ] broker stream disconnect 후 reconnect 시 event duplication 없이 복구된다.
- [ ] 장중 재시작 후 working orders와 positions를 복구한다.
- [ ] manual broker-side cancel 후 reconciliation이 mismatch를 탐지한다.

## 3. 리플레이 테스트

- [ ] 과거 canonical order event 로그로 projection을 재구성할 수 있다.
- [ ] 같은 이벤트 스트림을 두 번 재생해도 최종 상태가 동일하다.
- [ ] out-of-order event가 들어와도 안전하게 처리된다.

## 4. 장애/복구 테스트

- [ ] submit 직후 프로세스 강제 종료 -> 재시작 복구
- [ ] partial fill 직후 websocket 종료 -> HTTP poll 기반 복구
- [ ] broker fetch timeout 반복 -> no-trade mode 전환
- [ ] DB 일시 장애 -> event write 재시도 / 세션 halt

## 5. 운영 전 UAT

- [ ] operator runbook 기준 pre-open checklist 완료
- [ ] approval required paper session 5일 이상 무중단 운영
- [ ] EOD blotter / reconciliation report 자동 생성 확인
- [ ] kill switch soft/hard/flatten_all 실습 확인
- [ ] degraded mode 수동 전환과 자동 전환 모두 검증

## 6. Live readiness gate

아래 항목이 모두 참이어야 live enable을 검토할 수 있다.

- [ ] 최근 paper 세션에서 미해결 mismatch 0
- [ ] 중복 주문 사고 0
- [ ] operator action이 모두 감사 로그에 남음
- [ ] risk guard false negative 사례 없음
- [ ] 하루 종료 시 브로커/내부 포지션 불일치 0
- [ ] emergency flatten runbook 리허설 완료
