-- A-3 (plan crawl-24x7-1): 소스 레지스트리 증축 — additive only. -- fetch_method : rss / rss+page / sitemap+page / page / api / signal-only -- fulltext_policy : none(현행 유지) / page(기사 페이지 fetch 후 4-tier 승격) / feed-full(피드 본문이 전문) -- auth_profile : NULL=공개, 값=구독 세션 키 (B-3 Playwright 어댑터용 슬롯) -- poll_interval_minutes : 소스별 차등 폴링 (NULL=전역 6h 사이클) -- etag / last_modified : 조건부 GET 워터마크 — 받은 그대로 저장·재전송 (상태는 전부 DB, APScheduler in-process) -- feed_content_hash : CDN ETag 회전 대비 콘텐츠 해시 변경감지 병행 -- selector_override : 추출 실패 잦은 소스의 site-specific CSS selector (JSONB) -- parser_quirk : rdf / table-strip / gn-redirect 등 파서 특이 케이스 ALTER TABLE news_sources ADD COLUMN IF NOT EXISTS fetch_method VARCHAR(20) NOT NULL DEFAULT 'rss', ADD COLUMN IF NOT EXISTS fulltext_policy VARCHAR(20) NOT NULL DEFAULT 'none', ADD COLUMN IF NOT EXISTS auth_profile VARCHAR(50), ADD COLUMN IF NOT EXISTS poll_interval_minutes INTEGER, ADD COLUMN IF NOT EXISTS etag TEXT, ADD COLUMN IF NOT EXISTS last_modified TEXT, ADD COLUMN IF NOT EXISTS feed_content_hash VARCHAR(64), ADD COLUMN IF NOT EXISTS selector_override JSONB, ADD COLUMN IF NOT EXISTS parser_quirk VARCHAR(30);