fix: Update-Hinweis vergleicht gegen den laufenden Build (D45)

Der Hinweis erschien oft für genau die Fassung, die gerade geladen war. Zwei
Fehler mit derselben Wurzel — die Prüfung verglich nie mit dem laufenden Stand:

- Relais statt Vergleich: der abgerufene Inhalts-Hash wurde gegen den ZULETZT
  ABGERUFENEN gehalten (localStorage), nicht gegen den laufenden. Beim Deploy
  antworten CDN-Knoten unterschiedlich; jeder Wechsel schlug an, und der
  Schlüssel wird von allen Tabs geteilt.
- Klebendes Flag: `werkbaum-update-available` entfernte nur „Jetzt laden".
  Nach F5 oder „Später" blieb es stehen, und der Load-Check zeigte das Banner
  bei jedem weiteren Laden erneut.

Verglichen wird jetzt der Commit aus dem Footer-Versionslink der laufenden
Seite gegen den der abgerufenen HTML (D16 spritzt ihn in beiden Deploy-Wegen
ein). Kein localStorage dazwischen; beim Laden wird nichts gemeldet, die
Prüfung zwei Sekunden später holt es nach. Eine spätere „aktuell"-Meldung
sammelt Banner und Footer-Symbol wieder ein. Rückfall auf den Inhalts-Hash
für Builds ohne Marker (Dev-Server), Vergleichsstand dort der erste Abruf
der Seiten-Sitzung.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-23 11:36:02 +02:00
co-authored by Claude Fable 5
parent 579dfbf789
commit f1ac57c931
3 changed files with 170 additions and 28 deletions
+13
View File
@@ -491,3 +491,16 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
Diagramm maximiert. Layout-CSS hängt an `body.mobile`, nicht an einer eigenen
`@media`-Regel — beide Seiten müssen denselben 640-px-Schwellwert nutzen
(SPEC §9, D17).
- **Update-Prüfung (D45):** verglichen wird der Commit aus dem
Footer-Versionslink der **laufenden** Seite (`runningBuildId()`, DOM) gegen
den aus der abgerufenen HTML (`buildIdFromHtml()`). Kein localStorage
dazwischen — `werkbaum-update-available`/`werkbaum-html-hash` werden **nicht
mehr geschrieben** (der Reset räumt sie nur noch weg). Wer hier etwas
„merken" will: Genau das war der Fehler — ein gemerktes „Update verfügbar"
überlebt das Neuladen, das es einspielt, und meldet dieselbe Fassung endlos
weiter. Beim Laden wird deshalb **nichts** gemeldet; die Prüfung nach zwei
Sekunden holt es nach. Zum Testen: Auf dem Dev-Server steht im Footer der
Platzhalter `…/commit/main` (keine Commit-Kennung) — dort läuft der
Hash-Rückfall, der Marker-Pfad ist nur zu prüfen, wenn man einen echten
`commit/<sha>` in `index.html` einspritzt (danach zurücknehmen!) und
`window.fetch` überschreibt.