Skip to content

ci(smoke): 네트워크 도달 실패와 계약 파손을 분리 (canary 오탐 수정) - #24

Merged
djfksjd merged 1 commit into
mainfrom
fix/smoke-unreachable-vs-contract
Jul 27, 2026
Merged

ci(smoke): 네트워크 도달 실패와 계약 파손을 분리 (canary 오탐 수정)#24
djfksjd merged 1 commit into
mainfrom
fix/smoke-unreachable-vs-contract

Conversation

@djfksjd

@djfksjd djfksjd commented Jul 27, 2026

Copy link
Copy Markdown
Owner

문제

스케줄 smoke canary가 양 레포에서 실패 상태였다. 원인은 스킬 결함이 아니라 canary 자체의 오탐이다.

크롤러의 exit 2는 두 가지를 구분하지 않는다:

  • 첫 페이지 0건 파싱 = 사이트 계약 파손 (canary가 잡아야 할 진짜 신호)
  • 네트워크 도달 실패 = 러너가 해외 IP라서 대상 사이트에 못 닿음

근거

러너에서 백엔드 A/B 진단을 직접 돌렸다:

사이트 urllib curl_cffi
seoulshinbo FAIL (timeout 30.8s) FAIL (curl 28, 30.0s)
bizinfo OK (200) OK (200)
  • seoulshinbo는 TLS 지문 문제가 아니라 TCP 연결 자체가 안 되는 구조적 도달 불가. 같은 시각 한국 IP 로컬에서는 16건 정상 수집.
  • bizinfo·kocca·smtech간헐 flake (한 런에서 타임아웃, 몇 분 뒤 정상).

둘 다 빨간불로 만들면 canary가 상시 실패로 굳어 진짜 계약 파손이 묻힌다.

수정

  • .github/smoke_step.sh — 라이브 스텝 래퍼. 도달 실패는 30초 뒤 1회 재시도, 그래도 실패하면 ::warning::으로 강등. 그 외 실패는 그대로 job 실패.
  • 네트워크 신호를 먼저 판정한다 — 도달 실패는 0건 파싱을 부수적으로 유발하지만, 그 역은 성립하지 않는다.

검증

래퍼 4개 분기를 로컬에서 확인(정상 0 / 도달실패 soft 0 / 계약파손 hard 2 / flake 재시도 후 0)했고, 브랜치에서 실제 smoke를 돌려 통과시켰다.

🤖 Generated with Claude Code

이 실행에서 kocca·smtech가 실제로 타임아웃 났고 warning으로 강등되어 job은 ✓ 통과했다 (run 30305395987).

스케줄 canary가 실패한 원인은 스킬 결함이 아니라 canary 자체의 오탐이었다.
2026-07-27 스케줄 런에서 bizinfo가 HTTP 28(타임아웃)로 exit 2를 냈는데,
같은 커밋 재실행에서는 4개 소스 전부 정상 수집됐고 한국 IP 로컬에서도
항상 정상이다. 러너는 해외 IP라 일부 한국 공공기관 사이트에 간헐적으로
닿지 못한다.

크롤러의 exit 2는 "첫 페이지 0건 파싱(계약 파손)"과 "네트워크 도달 실패"를
구분하지 않는다. 둘을 같이 빨간불로 만들면 canary가 상시 실패 상태가 되고
진짜 계약 파손이 묻힌다.

- .github/smoke_step.sh: 라이브 스텝 래퍼. 도달 실패는 30초 뒤 1회 재시도
  후에도 실패하면 ::warning:: 으로 강등, 그 외 실패는 그대로 job 실패.
  네트워크 신호를 먼저 판정한다 — 도달 실패는 0건 파싱을 부수적으로
  유발하지만, 그 역은 성립하지 않는다.
- sources `list all` 단일 스텝을 소스별 스텝으로 분리. 한 출력에 묶이면
  한 소스의 도달 실패가 다른 소스의 계약 파손까지 warning 으로 강등시킨다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@djfksjd
djfksjd merged commit 5b84ea2 into main Jul 27, 2026
4 checks passed
@djfksjd
djfksjd deleted the fix/smoke-unreachable-vs-contract branch July 27, 2026 21:10
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.

1 participant