Files
trex-core/docs/batches/bat-049_20260621_alarm-system-dcy-033/planning.md
T
genichinandClaude Opus 4.8 d4c5fcbba1 feat(alarm): trex-core 알람 emitter + trex.alerts exchange (dcy-033 BAT-049, Implemented)
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
2026-06-21 19:25:55 +09:00

3.3 KiB
Raw Blame History

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 문서를 정합한다.

구현 순서:

  1. REQ-098 먼저: docs/interface-contract.md에 Interface: trex.alerts (알람 채널, dcy-033) 섹션 추가 (기존 섹션 불변). 이 문서가 이후 구현의 단일 출처.
  2. REQ-099: topology 상수 + declare_topology() 확장 + publish_alarm_event() 포트/어댑터 추가.
  3. REQ-100: AlarmEmitter 구현 + 8개 CRITICAL 발생 지점 배선. rabbitmq.py 콜백 설계 병행.
  4. REQ-101: docs/runtime-flows.md 알람 발신 섹션 추가 + docs/interface-contract.md Change Log + Last Updated 갱신.
  5. 테스트: 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

  1. REQ-098 문서 완성 (interface-contract.md 신규 섹션)
  2. REQ-099 topology + publish_alarm_event 포트/어댑터 구현
  3. REQ-100 AlarmEmitter + 8개 배선 완성
  4. REQ-101 baseline 문서 정합
  5. 단위 테스트 전부 통과 + 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 유지.