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.city와 notebookcheck.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
@Seungpyo1007
Seungpyo1007 deleted the fix/verify-promote-live-source branch September 23, 2026 12:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant