diff --git a/VERSION b/VERSION index 943f9cb..f8a696c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.7.1 +1.7.2 diff --git a/resources/js/app.js b/resources/js/app.js index 5035043..8db7a30 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -410,8 +410,31 @@ document.addEventListener('alpine:init', () => { this.stuck = false; this.step = state.step ?? null; } catch { - // Expected while the containers are down. Keep asking: this is - // the middle of the very event being watched, not a fault. + // Eine gescheiterte Anfrage ist erst dann ein Deployment, wenn + // wir vorher WUSSTEN, dass eines läuft. + // + // Hier stand `this.wasRunning = true` ohne Bedingung. Damit + // schaltete jede fehlgeschlagene Anfrage das Vollbild-Fenster + // ein — auch eine, die nichts mit einer Aktualisierung zu tun + // hatte. Am Telefon passierte das ständig: `visibilitychange` + // prüft sofort bei jeder Rückkehr in den Vordergrund, das + // Funkmodul ist dann noch nicht wach, die Anfrage scheitert, + // und der Betreiber sah „Aktualisierung läuft" über einer + // Anwendung, die vollkommen in Ordnung war. Nach einem + // Neuladen war es weg, weil die Seite dann den echten + // Serverwert mitbrachte — was es wie einen Geist aussehen + // liess statt wie den Fehler, der es war. + // + // Während eines echten Deployments ist die Bedingung erfüllt: + // Der Server hat `running` gemeldet, bevor die Behälter + // heruntergingen. Genau dann soll das Fenster stehen bleiben, + // und genau dann tut es das weiterhin. + if (! this.wasRunning && ! this.serverConfirmed) { + this.schedule(); + + return; + } + this.wasRunning = true; // A deployment restart is seconds. Two minutes of nothing is