# BAT-043 Implementation - Status: completed - Batch: BAT-043 ## Plan Summary - rejected SellIntent 응답에 additive `retryable: bool` 추가 (core 소유 매핑). 완전 additive·하위호환. ## Changed Files - `trex_core/application/messaging_handlers.py` — `_SELL_REJECT_RETRYABLE` dict + `_sell_reject_retryable(reason)` helper(미인식 true, `bad_request*` false) + intent 응답 빌더에 `intent_type=="sell"` & `status=="rejected"` 시 `retryable` 부여(정상 거부 경로 + sell bad_request 조기반환 경로 모두). - `docs/interface-contract.md` — intent RPC 응답 표에 rejected sell `retryable` 명시 + Change Log. - `tests/application/test_sell_retryable_flag.py` (신규) — 매핑 7 reason + 미인식 + None + bad_request + 응답 필드(inactive/unknown_slot/bad_request → false, admitted/buy → 부재). ## Execution Log 1. `_SELL_REJECT_RETRYABLE` 매핑 + helper 추가(messaging_handlers). 2. 응답 빌더 2지점(정상 결정 / sell bad_request)에 additive 부여. 3. interface-contract 정합 + 테스트 작성. ## Validation - `TREX_BROKER=paper uv run pytest -q` → **487 passed, 47 skipped**(BAT-042 479 + 본 batch 8). 신규 8: 매핑 3 + 응답 5. - `uv run ruff check trex_core/ tests/` → All checks passed. - 회귀: 기존 intent consumer/handler 테스트 green(admitted/buy 응답 retryable 부재 확인 포함). ## Remaining Risks - reason 어휘 drift: 새 reason 추가 시 매핑 갱신 필요(미인식 기본 true 안전망 + 매핑 테스트가 현행 reason 전수 커버). - 없음(완전 additive, 기존 계약 불변).