Files
trex-core/docs/srs/Interface/req-086_liquidation-reason-actor-exposure.md
T
genichinandClaude Opus 4.8 d8d9021260 feat(execution,obs): 호가단위 스냅(dcy-030/#28) + 운영 관측성(dcy-029/#29) + REL-007 환류
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>
2026-06-16 13:19:31 +09:00

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

  1. Given safety_sell이 stop_loss로 발화, When 전이/로그, Then reason=stop_loss + actor=safety_sell이 함께 기록된다.
  2. Given 전략 SellIntent 매도, When 전이/로그, Then actor가 전략 주체로 기록되어 안전망과 구분된다.
  3. Given 청산 로그 라인, When 운영자가 확인, Then reason만으로 오해되지 않도록 actor가 동반 노출된다.
  4. Given safety_sell 4경로(stop_loss/take_profit/forced_close_at/market_close_liquidation), When 발화, Then 각 reason이 actor=safety_sell과 함께 정확히 기록된다.
  5. Given 기존 reason 소비처(_SELL_REJECT_RETRYABLE 등), When 변경 적용, Then 기존 동작 회귀 없음(reason 값 불변).
  6. 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 없음.