asyncio.create_task ohne gespeicherte Referenz wird vom Garbage Collector
sofort gelöscht bevor der Task läuft (dokumentiertes Python-Verhalten).
Fix: _bg_tasks-Set hält Referenz bis done_callback sie wieder entfernt.
BackgroundTasks wurde nicht ausgeführt (Bug in der Starlette-Integration).
asyncio.create_task() plant den Overpass-Fetch direkt im Event-Loop ein,
Argumente explizit übergeben statt Closure um Capture-Probleme zu vermeiden.
Stale-Tile-Fetches blockierten den HTTP-Request minutenlang → _overpassActive
blieb auf true → Frontend-Scan konnte nicht neu starten.
Fix: BackgroundTasks statt await — /pois antwortet sofort mit DB-Daten,
Overpass-Fetch läuft im Hintergrund. Beim nächsten Kartenschwenk sind
die frisch gecachten Tiles dann verfügbar.
Semaphore 2→1 (nur 1 gleichzeitige Anfrage), 2s Mindestabstand,
User-Agent mit App-Name und Kontakt — Standard-Höflichkeit für
Community-Dienste wie kumi.systems.
23.500 Overpass-Anfragen täglich haben die Server-IP geblockt (406).
Fix: OSM-Cache füllt sich nur noch on-demand wenn Nutzer die Karte benutzen.
CACHE_DAYS auf 90 erhöht damit selten besuchte Bereiche länger frisch bleiben.
overpass-api.de und lz4.overpass-api.de blockieren die Server-IP mit 406.
OVERPASS_URLS-Liste mit Fallback: kumi → lz4 → overpass-api.de.
_fetch_overpass probiert jede Instanz, springt bei 4xx-Fehler zur nächsten.