Version 1.7.2 — eine gescheiterte Anfrage ist kein Deployment
tests / pest (push) Waiting to run Details
tests / assets (push) Waiting to run Details
tests / release (push) Blocked by required conditions Details

Auf dem Telefon erschien das Vollbild-Fenster "Aktualisierung laeuft" immer
wieder, obwohl nichts lief; nach einem Neuladen war es weg.

Die Ursache stand im catch des Waechters:

    } catch {
        this.wasRunning = true;   // ohne jede Bedingung

Jede fehlgeschlagene Anfrage schaltete damit das Fenster ein — auch eine, die
mit einer Aktualisierung nichts zu tun hatte. Am Telefon passierte das
staendig: visibilitychange prueft sofort bei jeder Rueckkehr in den
Vordergrund, das Funkmodul ist dann noch nicht wach, die Anfrage scheitert.
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.

Jetzt gilt eine gescheiterte Anfrage erst dann als Deployment, wenn vorher
bekannt war, dass eines laeuft (wasRunning oder serverConfirmed). Waehrend
eines echten Deployments ist das erfuellt — der Server meldet running, bevor
die Behaelter heruntergehen —, also bleibt das Fenster dort stehen wie bisher.

2879 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat/versandtakt v1.7.2
nexxo 2026-08-04 10:59:26 +02:00
parent 91d3ce4064
commit e80aac8b4a
2 changed files with 26 additions and 3 deletions

View File

@ -1 +1 @@
1.7.1
1.7.2

View File

@ -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