/code-review 지적 3건을 처리했고, 그 과정에서 리뷰가 놓친 라이브 버그 1건이 나왔다.
1) 제공자 간 확증이 dedup 으로 통째로 사라지던 버그 (리뷰 미지적)
`counted_web_buckets` 가 match 타입만으로 키를 만들었다. CSE 웹 결과는
google_custom_search.py:301 에서 match="page" 를 달고 오는데, Vision 이
먼저 match="page" 행을 보고하면 같은 "page" 버킷이라 CSE 히트가 점수도
사유도 없이 버려졌다 — 운영자는 두 번째 제공자가 이미지를 찾았다는 사실
자체를 볼 수 없었다. 버킷을 (provider, match) 로 쪼갰다.
2) WEB_PRESENCE 풀을 제공자별로 분리
풀이 교정하려던 상관은 한 응답 안에 있다. Vision 의 "full copy" 와
"hosting page" 는 한 사실의 두 시각이지만, CSE 가 독립적으로 찾은 게시
페이지는 다른 사실이다. 한 풀에 묶으니 주석 자신이 "high 에 도달해야
한다"고 말하는 교차 확증이 60/medium 에 갇혔다.
Vision 자기 상관 뷰 4개: 125 -> 60/medium (의도대로 유지)
Vision full + CSE page: 45+35 = 80/high (이전엔 45/medium — CSE 가 dedup)
3) category 탈출구는 되살리지 않고 제거
`category in {character, celebrity, work}` 분기는 writer 가 없다. src 전체에
그 키를 쓰는 곳이 없고(Vision 엔티티 행은 {entity, entity_id, match,
provider}), MID -> 카테고리 해석은 폐쇄망에서 불가능한 지식그래프 조회다.
즉 "유명인은 상한 제외"라고 읽히는 주석이 실제로는 도달 불가 경로를
문서화하고 있었다. 분기를 지우고, 미등록 유명인이 라벨만으로 high 가 안
되는 것은 의도된 미탐 트레이드임을 명시했다. 실존하는 승격 경로는
지식DB/주의목록(FINGERPRINT, 풀링 대상 아님)이며 테스트로 고정했다.
4) match 없는 레거시 행의 +45 는 보존
현재 생산자는 모두 match 를 채우므로 url 폴백은 레거시 전용이다. 라운드
트립이 result_url -> url 별칭을 만들기 때문에 이 분기를 지우면 과거 행의
점수가 바뀐다 — 주석으로 레거시 전용임을 못박고 가중치는 유지했다.
SCORER_VERSION v2 -> v3. v2 주석이 WEB_ENTITY_MAX_POINTS 만 적고 두 변경 중
영향이 더 큰 WEB_PRESENCE_MAX_POINTS 를 빠뜨렸던 것도 함께 보강했다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BStHFrjQj2VypecSG9ex1V