- website_parser: anchor-only href 추출로 CDN 노이즈 차단, additional_domains 를
data-lang/서브도메인 prefix 기반 글로벌 사이트 검출로 교체, main_cta 카테고리화
(전화/카톡/예약, fallback 제거) + 최대 3개 제한
- firecrawl: html → rawHtml 로 변경 (script 태그 보존 → 픽셀 검출 정상화)
- gemini_vision: logo_colors_hex 최대 5개 → 2개
- branding: 기존 brandAssets 보존하면서 logo_* 머지 (collect_brand_basics 결과
덮어쓰지 않게)
- facebook_audit: _page_patch 가 누락 필드 default 값으로 초기화 (Apify 가 페이지
데이터 못 받을 때 schema validation 실패 방어)
- schemas: top_videos / bio / linked_domain 옵셔널 처리 (실제 누락 가능 케이스 대응)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- _build_overrides 가 result 받아 deep_merge 까지 처리, _patch_report 제거
- _deep_merge: list by-index → wholesale 치환 (EN 슬롯 누락/라벨 섞임 차단)
- build_facebook_audit: template-copy 대신 LLM logo/logo_description 만 두 페이지에 공통 적용
- _page_patch: language/label 명시 박음 (KR/EN 교차 오염 방지)
- FacebookPage/InstagramAccount/YouTubeAudit: 불필요한 Optional 제거, has_whatsapp/top_content_type 만 Optional 유지
- build_instagram_audit/build_facebook_audit: dict 반환 (overrides[k] = patch 단순 박기)
required로 두면 LLM 응답이나 수집 데이터 누락 시 pydantic ValidationError로
리포트 endpoint 전체가 500으로 죽음. 실제 테스트(청담오라클)에서 LLM이
weekly_view_growth, established 등 10개 필드를 null 반환하는 케이스 확인.
- ClinicSnapshot/YouTubeAudit: schemas + models 양쪽 모두 Optional (LLM 입력 검증
+ FastAPI 응답 검증 둘 다 통과 필요)
- InstagramAccount/InstagramAudit/FacebookPage/FacebookAudit: models만 (인스타·페북 빈
계정/페이지 케이스 대응)
- list[T] 필드는 기본값 [] 부여
트레이드오프: 스키마 레벨 데이터 완결성 보장 약화. 운영하며 자주 비는 필드
패턴 보고 collection 단계 보강 필요.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>