dcy-030 (issue #28, P0 체결 복구): - REQ-083 KRX 호가단위(tick) 순수 유틸 (domain/pricing.py) - REQ-070 CHG: 슬리피지 실효가 호가단위 스냅 — 상한 준수(매수 floor/매도 ceil) + band<1tick 하한/상한 보장 + 부동소수 epsilon 가드. 147700→148400/54500→54700. - BAT-044 release-candidate dcy-029 (issue #29, 운영 관측성): - REQ-084 구조화 로깅 기반 (runtime/logging_setup.py): ISO8601 KST·레벨·Loki JSON ·correlation id(slot_id) - REQ-085 주문 결과 로깅 (event=order_submit|fill|reject) - REQ-087 거부 ERROR 가시성 (조용한 롤백 제거) - REQ-086 청산 reason+actor 동반 노출 (안전망/전략 구분, 신규 필드 없음) - REQ-088 운영 조회 CLI report (application/operator_report.py, 보유·오늘 체결 ·실현 PnL net·대기, direct-DB) - REQ-089 운영자 런북 docs/operations.md - REQ-090 baseline 정합 (runtime-flows·project-structure·interface-contract) - BAT-045(P0)·BAT-046(P1) release-candidate REL-007: confirmed → feedback-captured (운영 인스턴스 라이브 검증 + #28/#29 환류 정규화). BAT-037~041 released. 검증: 537 passed, 47 skipped, 회귀 0, ruff clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.8 KiB
3.8 KiB
req-086: 청산 reason+actor 동반 노출 — 안전망/전략 구분 가시화
- Status: Implemented
- Type: Interface
- Priority: Medium
- Owner: project maintainers
Intent
- watchdog 소유 안전망 청산이
reason=stop_loss로만 보여 "전략의 진짜 손절"로 오해됐다(2026-06-15 064400). 신규 필드 없이, 기존reason(조건축)과 기존actor(주체축)를 함께 노출해 "안전망 자율청산(actor=safety_sell)"과 "전략 손절(actor=strategy)"을 운영자가 구분하게 한다. (dcy-029 FR-3, OQ-4=Option A)
Requirement
- 기존
reason어휘{stop_loss, take_profit, forced_close_at, market_close_liquidation}(safety_sell 발화)와 전략 SellIntent의 reason을 계약으로 고정한다(신규 reason 값·신규 분류 필드 없음). - 슬롯 전이 로그/이벤트/조회 뷰에
reason과actor(safety_sell/strategy/execution_loop)를 함께 노출한다. 특히 주문 결과 로깅(REQ-085)·조회 CLI(REQ-088)·청산 로그에 actor가 reason과 같이 보이도록 한다. docs/interface-contract.md에 reason+actor 어휘와 "안전망 자율청산 family vs 전략 매도" 구분을 명문화한다.- 기존
slots.req/이벤트/전이 기록의 기존 동작은 깨지 않는다(additive 노출).
Acceptance Criteria
- Given safety_sell이 stop_loss로 발화, When 전이/로그, Then
reason=stop_loss+actor=safety_sell이 함께 기록된다. - Given 전략 SellIntent 매도, When 전이/로그, Then
actor가 전략 주체로 기록되어 안전망과 구분된다. - Given 청산 로그 라인, When 운영자가 확인, Then reason만으로 오해되지 않도록 actor가 동반 노출된다.
- Given safety_sell 4경로(stop_loss/take_profit/forced_close_at/market_close_liquidation), When 발화, Then 각 reason이 actor=safety_sell과 함께 정확히 기록된다.
- Given 기존 reason 소비처(
_SELL_REJECT_RETRYABLE등), When 변경 적용, Then 기존 동작 회귀 없음(reason 값 불변). - Given interface-contract.md, When 갱신 후, Then reason+actor 어휘와 구분 규칙이 문서화돼 있다.
Impacted Area
- Docs: docs/interface-contract.md(reason+actor 어휘), docs/runtime-flows.md(청산 분류 노출)
- Modules: trex_core/application/safety_sell.py·execution.py(로그에 actor 동반), 조회 뷰(REQ-088)·주문결과 로깅(REQ-085)과 협조.
slot_transition_log는 이미 actor 기록. - Tests: safety_sell 각 경로 reason·actor 단위, 노출 형식 단위
Notes
- 코드 확인:
slot_transition_log는 이미actor를 기록하고, safety_sell은 이미 구분된 reason으로 발화한다. 본 REQ는 둘을 함께 노출(로그/뷰/계약 문서)하는 가시화가 핵심이며 신규 필드·신규 reason 값은 만들지 않는다(dcy-029 OQ-4 Option A). - 출처: dcy-029 FR-3, OQ-4.
Change Log
CHG-20260616-01
- Date: 2026-06-16
- Author: Justin Ko
Change Summary
- dcy-029 FR-3로부터 최초 생성(Proposed).
CHG-20260616-02
- Date: 2026-06-16
- Author: Justin Ko
- Type: status
- Summary: Proposed → Approved (confirm-req). 필수 필드·구체 AC 충족, source dcy-029(confirmed, Open OQ 0) 정합. dcy-029 P0/P1 batch 편성 예정.
CHG-20260616-IMPL
- Date: 2026-06-16
- Author: Justin Ko
- Type: status
- Summary: Approved → Implemented (confirm-req-implemented, BAT-046 release-candidate, dcy-029 P1). 근거: 단위/문서 AC 매핑(REQ-086 reason+actor 로그·interface-contract; REQ-088 operator_report 집계·net PnL·KST 경계·CLI report; REQ-089 docs/operations.md 4영역; REQ-090 runtime-flows·project-structure 정합). 14 passed(report+safety_sell), 전체 537 passed/47 skipped 회귀 0, ruff clean. report direct-DB·Loki 실 적재는 release 운영 검증 위임. Blocking Issues 없음.