Skip to content

fix(verify): require live sources for green promotion - #67

Merged
Seungpyo1007 merged 2 commits into
mainfrom
fix/verify-promote-live-source
Sep 18, 2026
Merged

Seungpyo1007 merged 2 commits into
mainfrom
fix/verify-promote-live-source

Conversation

@Seungpyo1007

@Seungpyo1007 Seungpyo1007 commented Sep 18, 2026

Copy link
Copy Markdown
Member

변경 사항

  • green 승급 시 인용된 Tier 1/2 출처 중 하나가 Tier 1 생존 확인 캐시에 살아 있어야 하도록 수정했습니다.
  • /verify pr의 crossref 결과 키에 카테고리를 포함해 동일 slug의 카테고리 간 판정 오재사용을 막았습니다.
  • 명시적 Cloudflare 자동화 차단 응답은 dead가 아닌 automation-challenge 상태로 분리했습니다.
  • 자동화 차단 상태는 캐시에 보존하지만 dead 집계에서는 제외합니다. 기존에 신뢰 등급이 있는 Tier 1/2 인용 URL에서만 생존 확인의 대체 신호로 사용합니다. 일반 401/403, 오류, 홈페이지 리다이렉트, 미분류 호스트는 계속 승급 불가입니다.

실측 결과

2026-09-18에 검증 모듈과 동일한 User-Agent로 확인했습니다.

  • cpubenchmark.net의 CPU 검색 페이지, gsmarena.com의 기기 페이지, technical.citynotebookcheck.net의 페이지는 200이었습니다.
  • browser.geekbench.com은 403과 CF-Mitigated: challenge, Cloudflare challenge HTML을 반환했습니다.
  • phonedb.net은 Python 검증 경로에서 TLS 인증서 검증 오류로 HTTP 상태 없이 실패했습니다. 같은 User-Agent의 curl 요청은 검증된 200을 반환했습니다. 이 TLS 오류는 자동화 차단으로 간주하거나 승급 근거로 사용하지 않습니다.

설계 이유

일반 403을 허용하면 존재하지 않거나 권한 없는 URL도 승급될 수 있습니다. 반대로 명시적인 gateway challenge를 dead로 캐시하면 실제 호스트의 자동화 방침이 대량의 죽은 인용처럼 보입니다. 따라서 정확한 challenge 신호와 기존 T1/T2 호스트 분류를 함께 요구합니다.

영향

생존 확인이 실제 승급 조건에 적용되므로, 기존에 green이었지만 출처가 죽었거나 아직 확인되지 않은 레코드는 재검증 시 승급되지 않을 수 있습니다. 따라서 승급률이 변동할 수 있습니다. 다만 명시적 자동화 차단을 dead로 오판정해 정상 T1/T2 인용 출처가 대량으로 보류되는 회귀는 방지합니다.

검증

  • uv run --extra dev pytest -q tests/verify 통과 (67 passed, 1 skipped)
  • Ruff 및 git diff --check 통과
  • 전체 pytest는 TechAPI 데이터 서브모듈이 비어 있어 API 통합 테스트 27건이 데이터 0건으로 실패했습니다.

@Seungpyo1007 Seungpyo1007 self-assigned this Sep 18, 2026
@Seungpyo1007
Seungpyo1007 merged commit 78abedc into main Sep 18, 2026
1 check passed
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