feat(messaging): OPS-005 이벤트 발행 연결 신뢰성 (BAT-047)
발행 전용 연결의 idle heartbeat 사망 후 첫 발행 유실 결함 제거. - REQ-091 발행 재시도 + 강제 재연결(_force_reconnect, is_open 불신) - REQ-092 idle keepalive(execution-loop 단일스레드 틱, process_data_events time_limit=0) - REQ-093 DLQ 가시성 + emit 실패 ERROR 경보(구조화 로그, dcy-029 재사용) - REQ-094 baseline 문서 정합(runtime-flows/operations/project-structure) 독립 opus QC PASS-WITH-NOTES → 시정 2건(ruff F401, AC-3 프로덕션 경로) 완료. 554 passed/47 skipped/회귀 0/ruff clean. NFR-1 wire 무회귀(interface-contract diff 0). BAT-047 release-candidate, REQ-091~094 Implemented. dcy-031. M2 트랙B. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
This commit is contained in:
@@ -112,6 +112,15 @@ class MessagingTransport(Protocol):
|
||||
exchange, dispatch to handler. Blocks until `stop` is set."""
|
||||
...
|
||||
|
||||
def keepalive_tick(self) -> None:
|
||||
"""Process pending I/O frames to keep the connection alive (REQ-092).
|
||||
|
||||
MUST be called from the thread that owns this transport instance.
|
||||
Non-blocking (time_limit=0 equivalent). Implementations that do not
|
||||
need keepalive (e.g. InMemoryTransport) should be a no-op.
|
||||
"""
|
||||
...
|
||||
|
||||
def health(self) -> TransportHealth:
|
||||
"""Current connection state (REQ-024)."""
|
||||
...
|
||||
|
||||
Reference in New Issue
Block a user