
v0.26.0
13. Mai 2026“Schicht ohne Hänger”
31
Commits
90
Dateien
+8723 / -184
Zeilen
Dispatcher, dieses BIG-Update zieht 31 Commits durch die Leitstelle und räumt genau die Bugs weg, die euch beim Start und im laufenden Einsatzbetrieb ausgebremst haben. Ergebnis: stabilerer /play-Start, sauberere Save-Tenancy und belastbareres Routing unter Last.
🔵 NEUES FEATURE
→ Das Team-Panel wurde mit Dashboard-Foundation, User-Management und Content-Analytics ausgebaut, weil zentrale Operations-Pfade bisher zu viel Boilerplate und Lückenrisiko hatten, wodurch Admin-Aufgaben schneller und sicherer in einem Flow laufen.—Key[DerHalbe]+
Shadow
- Wenn nur noch ein Owner übrig ist, blockiert der Last-Owner-Schutz Ban oder Account-Delete hart im Service, damit kein Save verwaist.
- Wenn ein Nutzer gebannt wird, fallen aktive Sessions sofort in `403`, weil `bannedAt` direkt aus der DB geprüft wird.
- Reviewer/Support sehen via `scope: "self"` nur eigene Analytics, während `scope: "all"` gezielt an `roles:assign` gebunden bleibt.
⚡ PERFORMANCE
→ OSRM wurde auf eine separate VM ausgelagert und der Import-/Prüfpfad gegen Mirror- und Redirect-Probleme gehärtet, weil Routing-Jobs unter Dateninkonsistenz unnötig abbrachen, damit Routenberechnung unter Last planbarer weiterläuft.—
Shadow
- Bei Geofabrik-MD5-Mismatch entsteht jetzt ein Warning statt eines harten Stops, sodass der Pipeline-Lauf nicht sofort abbricht.
- Timeout wurde auf 240 Minuten gesetzt und Memory-Limit entschärft, damit große Kartendatenläufe nicht vorzeitig sterben.
- MD5-Downloads folgen Redirects korrekt, was bei wechselnden Mirror-Hosts den Prüffluss stabil hält.
🔴 BUGFIX
→ Der /play-Mount nutzt die saveId jetzt einheitlich aus `useSaveContext`, weil die frühere Doppelhaltung einen Race-Condition-Loading-Hang erzeugte, wodurch du deine Schicht wieder direkt statt über Reload-Tricks starten kannst.—Key[DerHalbe]
- Wenn du nach Login sofort auf `/play` gehst, bleibt der Loader nicht mehr in einer Endlosschleife hängen.
- Wenn im Coop drei Dispatcher fast gleichzeitig den Save wechseln, bleibt die aktive Leitstelle konsistent statt auf altem State zu starten.
→ Beim Wachen-POST wurde das fehlende `typ`-Feld ergänzt und THW im `wacheTypSchema` nachgezogen, weil Schema-Drift sonst valide Käufe blockieren konnte, damit Ausbau und Beschaffung wieder ohne API-Fehler durchlaufen.—Key[DerHalbe]
- Wenn du mitten in einer Lage eine THW-nahe Wache anlegst, scheitert der Request nicht mehr an Validation-Fehlern.
- Bei Test- oder Staging-Migrationen laufen die Wache-Flows reproduzierbar statt je nach Payload-Struktur zu kippen.
🛡️ INFRASTRUKTUR
→ Die Save-Tenancy wurde über Timer, Projections und Event-Propagation konsistent auf saveId verschaltet, weil gemischte Kontexte zu falschen Zuordnungen führen konnten, sodass Einsätze und Zustände pro Leitstelle sauber getrennt bleiben.—Key[DerHalbe]
- Wenn du 3 Einsätze parallel jonglierst und zwischen Saves wechselst, landen Projection-Updates im richtigen Container statt im Nachbar-Save.
- Beim Onboarding mit neuem Account kann die erste Leitstelle zuverlässig angelegt werden, statt in einer halbfertigen Tenant-Boundary zu enden.
🔒 SICHERHEIT
→ CSP- und Bypass-Regeln sowie Deploy- und Health-Signale wurden bereinigt, weil leise Fehlkonfigurationen Betrieb und Monitoring verschleiern konnten, damit Karte, Diagnose und Rollout verlässlichere Rückmeldungen liefern.—Key[DerHalbe]
- Basemap-Requests auf `basemaps.cartocdn.com`-Subdomains werden sauber erlaubt, statt sporadisch an CSP zu scheitern.
- Health zeigt jetzt u.a. `redis_stream` und `tenancy-bypass-reason`, wodurch Nacht-Ops schneller erkennen, warum ein Check rot ist.
- Deploy-Skript schluckt keinen sudo-Fehler mehr still, sodass fehlerhafte Releases nicht als "grün" durchrutschen.