Skip to content

relay: 자동 복구 서킷이 3일 내내 open(skip 7,749건)인데 알림 경로 2개(CIRCUIT_STAMP env·human_alert_channel_id)가 모두 꺼져 사람이 모른다 #5715

Description

@itismyfield

증상

릴레이 자동 복구(relay_recoveryreattach_watcher)의 서킷 브레이커가 codex-adk-cdx(1479671301387059200), claude-adk-cc(1479671298497183835) 두 채널에서 2026-09-02~09-05 3일 내내 열려 있었다. 로그:

신호 건수
auto-heal skipped durable_reattach_circuit_open 3,684
auto-heal skipped durable_reattach_stale_identity 3,222
auto-heal skipped axis_b_exact_episode_required 843
ERROR degraded long backoff attempts=6 rearm 3600s 32

(relay_auto_heal.rs:746, relay_recovery.rs:941, 30초 주기.) 서킷이 열렸다는 사실이 사람에게 전달된 적은 한 번도 없다.

원인: 알림 경로 두 개가 모두 꺼져 있다

  1. 서킷 알림 스탬프가 feature flag 뒤에 있고 꺼져 있다. relay_recovery_circuit_alert_producer.rs:19 AGENTDESK_RELAY_CIRCUIT_STAMP=1일 때만 서킷 alert row를 enqueue한다(bug(relay/watchdog): 배포 재시작 직후 운영자 자신의 진행 중 foreground 턴을 stall로 오판해 수동복구 에스컬레이션 (false positive) #4615 S3c). 운영 launchd env에 이 변수가 없다(T3 게이트 판정 CFG-303 OFF).
  2. relay-signal alerter의 대상 채널이 비어 있다. config.rs:1393 주석대로 kanban_human_alert_channel_id 미설정이 "진짜 off 스위치"다. 운영 yaml과 kv settings 모두 비어 있어 observability/relay_signal_alert.rs는 로그만 남긴다(SVC-057 / CFG-165 관측 전용).

두 스위치 모두 "미설정 배포가 스팸을 내지 않도록" 보수적으로 설계된 것이지만, 결과적으로 운영 배포에서도 서킷 open을 아무도 모르는 상태가 됐다. 오늘 두 채널은 TUI-direct라 서킷 open 자체가 계측 오탐(#5712)일 가능성이 높다. 그러나 tmux-capture 채널에서 같은 일이 나면 그 채널은 소리 없이 먹통이 된다. 이 이슈의 본론은 "서킷을 닫아라"가 아니라 "서킷이 열리면 사람이 알게 하라"다.

수정 방향

  1. 서킷 open/close 전이 시 1회 운영 채널 알림. 30초 tick마다가 아니라 상태 전이 시에만. 채널 id·skipped_reason·열린 시각·다음 재시도 시각 포함.
  2. kanban_human_alert_channel_id 미설정 배포는 부팅 시 WARN 1회 + doctor에 항목 노출. 기본값을 강제하지는 않되 "꺼져 있음"을 보이게 한다.
  3. AGENTDESK_RELAY_CIRCUIT_STAMP 게이트를 운영 기본 ON으로 승격하거나, yaml 키로 옮겨 launchd env 의존을 없앤다. 게이트가 도입된 #4615의 승격 조건을 확인해서 결정.
  4. TUI-direct 채널은 #5712와 같이 tmux-capture 축 자동 복구 대상에서 제외. 그래야 이 알림이 오탐으로 시끄럽지 않다.

순서

#5712(스톨 오탐) 착지 → 본 이슈. 반대로 하면 알림이 켜지자마자 두 채널의 오탐 서킷으로 첫 알림이 나간다.

완료 정의

  • 서킷 open → close 전이가 운영 알림 채널에 각각 1건씩 도착 (통합 테스트 + 라이브 1회 실측)
  • 30초 tick 반복 중 추가 알림 0건 (dedupe)
  • kanban_human_alert_channel_id 미설정 시 부팅 WARN 1회 + doctor 항목 (테스트 고정)
  • AGENTDESK_RELAY_CIRCUIT_STAMP 처리 방침 결정 기록 (기본 ON 승격 또는 yaml 이관)
  • 반대방향: 서킷이 닫혀 있고 auto-heal이 정상 진행 중일 때 알림 0건

관련

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:project-agentdeskAuto-assign follow-up work to project-agentdeskbugSomething isn't workingpriority:P1P1: high

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions