Minor release. Two new search rules + Apify removal.
1. Geography — Netherlands + Italy only
GEO_COUNTRIES=it,nl(set by run_graph.py / .env) restricts search, ingestion, prefilter AND the Excel export to NL + IT (plus generic remote/Europe-wide). Germany/Spain/UK/France/etc. are dropped.- Whole-word matching ("roma" inside "Romania" no longer false-matches Italy) + Italian/Dutch provinces & administrative markers ("Provincia di", "Citta Metropolitana", Noord-Holland, ...), so e.g. "Cameri, Provincia di Novara" is correctly kept as Italy.
- Code default is empty (legacy EU-wide) so pipeline tests stay valid — same convention as INTERN_ONLY / ENABLE_*.
2. Language — English-sufficient roles only
- The eligibility language gate now strips HTML before matching and catches the "Italian (fluent)" word-order (e.g. Doctolib's "Italian (fluent) and English (fluent)"), which previously slipped through because HTML tags split the words. A mandatory non-English language => rejected; "a plus / preferred" => kept.
NON_ENGLISH_AUTO_REJECTis now env-driven (was hardcoded, ignoring .env) and drops JDs written in a non-English language.- The export re-runs the gate per row, so roles scored before the fix are also dropped from the dashboard.
3. Apify removed
agents/apify_search.pydeleted; no imports remain; requirements.txt & .env.example Apify-free; code comments cleaned; docs updated (+ SUPERSEDED banner on the Phase-2 spec). Sourcing is now Adzuna API + native ATS APIs (Greenhouse/Lever/Ashby/SmartRecruiters) + career-site connectors.
Result: jobs_master.xlsx is NL+IT, intern-only, English-sufficient (Doctolib PM dropped for mandatory Italian; Novara role recovered). 1204 tests passing.