# BAT-043: rejected SellIntent `retryable` 플래그 (issue #27) - Status: release-candidate - Profile: batch-lite - Source Discovery: 없음 (REQ-007 change-req, issue #27) - Included REQ: REQ-007 (CHG-20260615-01) - Excluded REQ: 없음 ## Summary - rejected SellIntent 응답(`trex.intent.req`, `intent_type:"sell"`, `status:"rejected"`)에 additive `retryable: bool` 을 추가한다. core 가 소유한 reason→retryable 매핑으로 채우고 `reason` 은 유지한다. trex-tsl 데몬이 손절매 재시도 판단을 reason 문자열 하드코딩 대신 권위 플래그로 하게 해 안전 경로 결합을 제거한다(issue #27, #26 sell-idempotency 후속). ## Scope - In Scope: - `trex_core/application/messaging_handlers.py` — intent 응답 빌더에 sell+rejected 시 `retryable` 부여 + core 소유 `_SELL_REJECT_RETRYABLE` 매핑(미인식 기본 true). - `docs/interface-contract.md` — rejected sell 응답 `retryable` 필드 명시. - 테스트: reason→retryable 매핑 케이스, 미인식 기본 true, admitted/processing/buy 부재, 기존 reason 유지. - Out of Scope: - reason 어휘 자체 변경(매핑만 추가). - buy intent / admitted / processing 응답 변경. - dcy-028(strategy-state) — 독립. ## Documents - Planning: [planning.md](./planning.md) - Design: none (batch-lite, additive 단일 필드 — 구조/흐름 영향 없음) - Implementation: [implementation.md](./implementation.md) - Verification: [verification.md](./verification.md) ## Notes - 완전 additive·하위호환: 필드 부재(older core) → 데몬 reason-string 폴백. 기존 응답/admit/buy 불변이라 회귀 리스크 낮음. - 안전 기본값: 미인식 reason → `retryable: true`(멈춘 손절매가 hammering 보다 위험, issue #27 답변에서 확정). - `bad_request:*`(malformed) → false(클라이언트 결함, 같은 바이트 재시도 무의미).