Reject private/loopback/link-local hosts on POST /api/ingest/rss and URL-shaped GDELT queries via camera_scraper.is_public_url (HTTP 400). PATCH /api/sources/{id} only accepts name, url, config, enabled (422 else).