Skip to content

fix(fleet-watch): retry transport failures before paging UNREACHABLE (#972) - #987

Merged
seoseo-ai merged 1 commit into
mainfrom
fix/972-fleet-watch-retry
Aug 6, 2026
Merged

fix(fleet-watch): retry transport failures before paging UNREACHABLE (#972)#987
seoseo-ai merged 1 commit into
mainfrom
fix/972-fleet-watch-retry

Conversation

@seoseo-ai

Copy link
Copy Markdown
Collaborator

What

adapter-fleet-watch의 노드당 1회 SSH 시도로 일시 blip과 실제 장애가 동일한 UNREACHABLE 페이지로 울리던 문제(실패율 42%)를 수정합니다 (#972).

  • transport 실패(빈 출력)에 한해 재시도: CCC_FLEET_RETRIES(기본 2, 상한 5)회, CCC_FLEET_RETRY_DELAY(기본 10초, 상한 120초) 간격
  • 응답이 온 노드(DOWN 포함)는 재질의하지 않음 — DOWN은 단일 응답 판정 유지
  • 재시도 소진 후에도 무응답이면 기존과 동일하게 UNREACHABLE + nonzero exit → 알림 경로 불변
  • 이슈 제안 2(runHistory 실패 요약 영속화 — 스키마 변경), 3(연속 실패 에스컬레이션 — 크로스런 상태)는 의도적으로 범위 제외 (본 PR은 제안 1)

Evidence

  • scripts/fleet-bridge-watch.test.sh: PASS=48 FAIL=0 — 신규 6건(blip 회수 OK·정확히 2회 시도 / 지속 실패 1회 보고·3회 시도 / DOWN 무재시도 / RETRIES=0 단일 시도)
  • 기존 42건 회귀 0, bash -n + shellcheck(warning+) clean, 스위트 1.4s (테스트는 delay=0 고정)

Closes #972

@seoseo-ai
seoseo-ai requested a review from jinon86 as a code owner August 6, 2026 09:26

@jinon86 jinon86 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved after explicit operator authorization using the Seoseo-held jinon86 credential.

…972)

adapter-fleet-watch ran at a 42% failure rate (8/19 runs) because each
node got exactly one SSH attempt: a transient blip and a real outage
produced the identical UNREACHABLE page. Two of the four sampled
failures were nodes that recovered minutes later with no human action;
the one real outage (daegyo 2026-08-06, #968) was buried in the noise.

The probe loop now retries transport failures (empty output) with a
delay before declaring UNREACHABLE: CCC_FLEET_RETRIES extra attempts
(default 2, capped at 5) spaced CCC_FLEET_RETRY_DELAY seconds apart
(default 10, capped at 120). A node that answers is never re-asked, so
DOWN stays a single-answer verdict and exit/notification semantics are
unchanged — retries only absorb blips, they never mask a verdict.

Issue proposals 2 (bounded failure summary in runHistory; schema
change) and 3 (consecutive-failure escalation; cross-run state) are
deliberately out of scope for this PR.

Co-Authored-By: Kimi K3 <noreply@moonshot.cn>
@seoseo-ai
seoseo-ai force-pushed the fix/972-fleet-watch-retry branch from 632e91d to be1b638 Compare August 6, 2026 09:34
@seoseo-ai
seoseo-ai merged commit 2d16c25 into main Aug 6, 2026
8 checks passed
@seoseo-ai
seoseo-ai deleted the fix/972-fleet-watch-retry branch August 6, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

adapter-fleet-watch: 42% failure rate with no retry — transient SSH blips are indistinguishable from real outages

2 participants