feat(extract): three-tier proxy system with Webshare auto-fetch
Replace two-tier proxy setup (PROXY_URLS / PROXY_URLS_FALLBACK) with
N-tier escalation: free → datacenter → residential.
- proxy.py: fetch_webshare_proxies() auto-fetches the Webshare download
API on each run (no more stale manually-copied lists). load_proxy_tiers()
assembles tiers from WEBSHARE_DOWNLOAD_URL, PROXY_URLS_DATACENTER,
PROXY_URLS_RESIDENTIAL. make_tiered_cycler() generalised to list[list[str]]
with N-level escalation; is_fallback_active() replaced by is_exhausted().
Old load_proxy_urls() / load_fallback_proxy_urls() deleted.
- playtomic_availability.py: both extract() and extract_recheck() use
load_proxy_tiers() + generalised cycler. _fetch_venues_parallel fallback_urls
param removed. All is_fallback_active() checks → is_exhausted().
- playtomic_tenants.py: flattens tiers for simple round-robin.
- test_supervisor.py: TestLoadProxyUrls removed (function deleted).
Added TestFetchWebshareProxies, TestLoadProxyTiers, TestTieredCyclerNTier
(11 tests covering parse format, error handling, escalation, thread safety).
47 tests pass, ruff clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>