You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
릴레이 자동 복구(relay_recovery → reattach_watcher)의 서킷 브레이커가 codex-adk-cdx(1479671301387059200), claude-adk-cc(1479671298497183835) 두 채널에서 2026-09-02~09-05 3일 내내 열려 있었다. 로그:
신호
건수
auto-heal skippeddurable_reattach_circuit_open
3,684
auto-heal skippeddurable_reattach_stale_identity
3,222
auto-heal skippedaxis_b_exact_episode_required
843
ERROR degraded long backoff attempts=6 rearm 3600s
32
(relay_auto_heal.rs:746, relay_recovery.rs:941, 30초 주기.) 서킷이 열렸다는 사실이 사람에게 전달된 적은 한 번도 없다.
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 채널에서 같은 일이 나면 그 채널은 소리 없이 먹통이 된다. 이 이슈의 본론은 "서킷을 닫아라"가 아니라 "서킷이 열리면 사람이 알게 하라"다.
수정 방향
서킷 open/close 전이 시 1회 운영 채널 알림. 30초 tick마다가 아니라 상태 전이 시에만. 채널 id·skipped_reason·열린 시각·다음 재시도 시각 포함.
kanban_human_alert_channel_id 미설정 배포는 부팅 시 WARN 1회 + doctor에 항목 노출. 기본값을 강제하지는 않되 "꺼져 있음"을 보이게 한다.
AGENTDESK_RELAY_CIRCUIT_STAMP 게이트를 운영 기본 ON으로 승격하거나, yaml 키로 옮겨 launchd env 의존을 없앤다. 게이트가 도입된 #4615의 승격 조건을 확인해서 결정.
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 이관)
증상
릴레이 자동 복구(
relay_recovery→reattach_watcher)의 서킷 브레이커가codex-adk-cdx(1479671301387059200),claude-adk-cc(1479671298497183835) 두 채널에서 2026-09-02~09-05 3일 내내 열려 있었다. 로그:auto-heal skippeddurable_reattach_circuit_openauto-heal skippeddurable_reattach_stale_identityauto-heal skippedaxis_b_exact_episode_requireddegraded long backoff attempts=6 rearm 3600s(
relay_auto_heal.rs:746,relay_recovery.rs:941, 30초 주기.) 서킷이 열렸다는 사실이 사람에게 전달된 적은 한 번도 없다.원인: 알림 경로 두 개가 모두 꺼져 있다
relay_recovery_circuit_alert_producer.rs:19AGENTDESK_RELAY_CIRCUIT_STAMP=1일 때만 서킷 alert row를 enqueue한다(bug(relay/watchdog): 배포 재시작 직후 운영자 자신의 진행 중 foreground 턴을 stall로 오판해 수동복구 에스컬레이션 (false positive) #4615 S3c). 운영 launchd env에 이 변수가 없다(T3 게이트 판정 CFG-303 OFF).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 채널에서 같은 일이 나면 그 채널은 소리 없이 먹통이 된다. 이 이슈의 본론은 "서킷을 닫아라"가 아니라 "서킷이 열리면 사람이 알게 하라"다.
수정 방향
kanban_human_alert_channel_id미설정 배포는 부팅 시 WARN 1회 +doctor에 항목 노출. 기본값을 강제하지는 않되 "꺼져 있음"을 보이게 한다.AGENTDESK_RELAY_CIRCUIT_STAMP게이트를 운영 기본 ON으로 승격하거나, yaml 키로 옮겨 launchd env 의존을 없앤다. 게이트가 도입된 #4615의 승격 조건을 확인해서 결정.순서
#5712(스톨 오탐) 착지 → 본 이슈. 반대로 하면 알림이 켜지자마자 두 채널의 오탐 서킷으로 첫 알림이 나간다.
완료 정의
kanban_human_alert_channel_id미설정 시 부팅 WARN 1회 + doctor 항목 (테스트 고정)AGENTDESK_RELAY_CIRCUIT_STAMP처리 방침 결정 기록 (기본 ON 승격 또는 yaml 이관)관련
kanban_human_alert_channel_idoff-switch 설계01c0c078d8, 로그~/.adk/release/logs/dcserver.stdout.log{,.1,.2}