3.8 KiB
3.8 KiB
BAT-012 Verification
- Status: verified
- Batch: BAT-012
Acceptance Mapping
구현 완료. evidence: 신규 단위 26 + PG 게이트(killswitch store 5) + e2e. 파일: test_control_dispatch.py(9), test_killswitch_execution.py(6), test_killswitch_masking_resume.py(6+1), test_killswitch_store.py(in-mem 5 + PG 5).
REQ-043 (제어 채널 + action dispatch)
| AC | Evidence (예정) |
|---|---|
| AC-1: pause 회귀 | control dispatch 단위(pause) |
| AC-2: resume/list 회귀 | 동일 |
| AC-3: kill_switch 라우팅 | 동일 |
| AC-4: resume_kill_switch 라우팅 | 동일 |
| AC-5: unknown action error | 동일 |
| AC-6: 워커 스레드 7 불변 | daemon 구조 검사/test_daemon |
REQ-044 (day-scoped 제외 store + 마이그레이션)
| AC | Evidence (예정) |
|---|---|
| AC-1: 테이블 스키마 | 마이그레이션 + PG 게이트 |
| AC-2: 마이그레이션 멱등 | 005 IF NOT EXISTS + 재적용 |
| AC-3: exclude→list_excluded | store 단위 |
| AC-4: day-scoped 자동 제외 | list_excluded(D+1) |
| AC-5: 멱등 exclude | store 단위 |
| AC-6: clear | store 단위 |
| AC-7: 전역 sentinel | store 단위 |
REQ-045 (kill_switch 실행)
| AC | Evidence (예정) |
|---|---|
| AC-1: 전역 전체 청산 | killswitch 실행 단위 |
| AC-2: portfolio 범위 한정 | 동일 |
| AC-3: pending_sell idempotency | 동일 |
| AC-4: portfolio_id 누락 error | 동일 |
| AC-5: 당일 제외 표시 | 044 store 연동 |
| AC-6: 이력 로깅 | 로그 캡처 |
| AC-7: dcy-007 독립 | 동일 |
| AC-8: 지연 N×100ms+5s | 측정/코드 검사 |
REQ-046 (masking + 자동복귀 + resume)
| AC | Evidence (예정) |
|---|---|
| AC-1: portfolio masking | masking 단위 |
| AC-2: 전역 masking | 동일 |
| AC-3: 추가매수 거부 | buyable masking |
| AC-4: 다음 거래일 자동복귀 | 날짜 mock |
| AC-5: 재시작 영속 masking | 통합/날짜 mock |
| AC-6: resume_kill_switch | resume 단위 |
| AC-7: portfolio_id 누락 error | 동일 |
| AC-8: 청산 슬롯 비가역 | 상태 불변 확인 |
REQ-047 (baseline 정합)
| AC | Evidence (예정) |
|---|---|
| AC-1: interface-contract 제어 채널+action | 문서 diff |
| AC-2: interface-contract kill/resume payload | 문서 diff |
| AC-3: runtime-flows 4흐름 | 문서 diff |
| AC-4: project-structure control consumer + store/sql | 문서 diff |
Evidence
- Test:
- 신규 단위 26 + PG 게이트 killswitch store 5 green. (control dispatch 9 / 실행 6 / masking·resume 7 / store in-mem 5 / store PG 5)
- 단위 전체 회귀:
262 passed / 28 skipped(::test_sandbox_token_and_submitdeselect). - 인프라 게이트(PG trex_core_test + RabbitMQ):
290 passed(마이그레이션 001~005 적용 + killswitch PG round-trip 포함). ruff check trex_core tests→ All passed.
- Manual / e2e:
- paper 데몬 control RPC e2e: buy 2(pf-A/pf-B) →
{action:kill_switch, scope:global}→{status:ok, liquidated:2}→ 양쪽holding→pending_sell(emergency_stop)→closed,killswitch_exclusion=[('*',2026-06-07)]→{action:resume_kill_switch, scope:global}→ exclusion 0. PASS.
- paper 데몬 control RPC e2e: buy 2(pf-A/pf-B) →
- Logs:
262 passed, 28 skipped/290 passed ... ~13s/ e2eRESULT: PASS.
Carried-Over / e2e
- BAT-010 R-2 선례(실 PG 마이그레이션 round-trip):
005인프라 게이트 290 passed 로 확인. - (이월, 비차단) 실 KIS LIVE kill_switch 발동 → 실매도 제출 → 상황별 에러(주말/휴장) 관찰 — safety-sell LIVE e2e 선례와 동일 접근, 차기 거래일 운영 실증. paper/mock + 290 passed 로 release gate 충족.
Result
- Ready for Release: true
- Blocking Issues:
- 없음. 제어 큐 rename 하위호환(R-1)은 release rollout 결정 항목(REQ-043 Notes), 실 KIS 라이브 발동은 운영 실증 이월 — 둘 다 blocker 아님.