AlarmEmitter(application, best-effort 비차단)+trex.alerts topic exchange 가산·격리+8 CRITICAL code 배선. 608 passed, opus QC PASS, 팀장 e2e(텔레그램 HTTP200) 통과. REQ-098~101 Implemented. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
3.3 KiB
3.3 KiB
BAT-049 Planning
- Status: confirmed
- Batch: BAT-049
- Profile: standard
Included REQ
- REQ-098: 알람 envelope wire 계약 정의 (Interface — 문서 전용)
- REQ-099: trex.alerts AMQP exchange 토폴로지 + 가산·격리 불변식 (Integration)
- REQ-100: trex-core 알람 emitter — CRITICAL code 발신 배선 (Integration)
- REQ-101: 알람 발신 흐름 baseline 문서 정합 (Documentation)
Delivery Plan
REQ-098(문서), REQ-099(topology), REQ-100(emitter + 배선), REQ-101(문서 정합)은 단일 인과 사슬을 형성한다:
- REQ-098 wire 계약 문서가 선행 확정되어야 REQ-100 emitter 구현의 필드/타입 근거가 생긴다.
- REQ-099 topology 선언이 선행되어야 REQ-100 발행 경로가 확보된다.
- REQ-101은 REQ-098~100 구현이 완료된 후 baseline 문서를 정합한다.
구현 순서:
- REQ-098 먼저:
docs/interface-contract.md에Interface: trex.alerts (알람 채널, dcy-033)섹션 추가 (기존 섹션 불변). 이 문서가 이후 구현의 단일 출처. - REQ-099: topology 상수 +
declare_topology()확장 +publish_alarm_event()포트/어댑터 추가. - REQ-100:
AlarmEmitter구현 + 8개 CRITICAL 발생 지점 배선.rabbitmq.py콜백 설계 병행. - REQ-101:
docs/runtime-flows.md알람 발신 섹션 추가 +docs/interface-contract.mdChange Log + Last Updated 갱신. - 테스트: AlarmEmitter 단위 테스트(8 code × 2 케이스) + declare_topology assertion + 기존 테스트 회귀.
Dependencies
- BAT-047(trex.events 재연결 신뢰성): 완료(release-candidate) —
RabbitMQTransport.publish_event()재시도 패턴을publish_alarm_event()에서 참조. - BAT-048(체결가 백필/알람 스파이크): 완료 — REQ-097 스파이크에서 trex.alerts AMQP 채널이 최우선 채택됨.
MessagingTransport포트 (BAT-007):publish_alarm_event()메서드 추가로 확장. 기존 메서드 시그니처 불변.
Design Gate
Design 필요: yes (standard — application 레이어 신규 컴포넌트 + 어댑터 확장 + 의존성 역전 설계 결정)
publish_unavailable_after_reconnect/dlq_publish_failed가 어댑터(rabbitmq.py)에서 발생하는데AlarmEmitter는 application에 있다 → 콜백 패턴 vs 이벤트 버스 선택을 design에서 확정해야 함.reset.py(CLI 진입점)에서 transport 미연결 가능 → None-safe 처리 방식 설계 필요.MessagingTransport프로토콜 확장이 기존InMemoryTransport호환성을 유지하는지 확인 필요.
Milestones
- REQ-098 문서 완성 (interface-contract.md 신규 섹션)
- REQ-099 topology + publish_alarm_event 포트/어댑터 구현
- REQ-100 AlarmEmitter + 8개 배선 완성
- REQ-101 baseline 문서 정합
- 단위 테스트 전부 통과 + ruff clean
Risks
- R-1(Low):
publish_alarm_event시그니처 추가 시InMemoryTransport에 stub 구현 누락 → Protocol mismatch. 완화: design 에서 확인 + test에서 isinstance 체크 추가. - R-2(Low): rabbitmq.py 어댑터 콜백 주입 시 daemon.py의 생성 순서 순환 가능성. 완화: design에서 콜백 늦은 주입(setter) 패턴 채택.
- R-3(Low): 기존 단위 테스트 InMemoryTransport 사용분이 declare_topology 호출 없이 통과해야 함. 완화: in_memory declare_topology는 no-op 유지.