"""JobSource interface: every ingestion provider must implement fetch_recent_jobs(). Scaffold stub -- not implemented yet. """ # TODO (Stage 1): define the JobSource ABC per CLAUDE.md "Stage 1 — Ingest (deterministic)". # Interface: # class JobSource(ABC): # @abstractmethod # def fetch_recent_jobs( # self, # search_terms: list[str], # location: str, # hours_old: int, # results_wanted: int, # ) -> list[RawJob]: ... # Implementations: jobspy_source.JobSpySource, apify_source.ApifySource.