install.ps1 warnt vor einem veralteten OTA-Bündel

Beim Prüfen, ob die GitHub-Entfernung eine Versionserhöhung brauchte, fiel
eine echte Lücke auf: nichts hielt frontend/app/bundle.json auf demselben
Stand wie manifest.json. Bei der nächsten echten Versionserhöhung ohne
"npm run ota" hätte das zu einem stillen Widerspruch geführt - die
Hinweisleiste hätte "veraltet" gemeldet (liest die Version live), die
Update-Seite "aktuell" (vergleicht gegen das eingefrorene, dann falsche
Bündel) -, ohne dass ein Update über OTA erreichbar gewesen wäre, bis
jemand den Widerspruch bemerkt.

install.ps1 liest jetzt direkt nach der Manifest-Version auch
frontend/app/bundle.json und vergleicht. Bei Abweichung: deutliche Warnung
plus erster Eintrag in der Restliste. Fehlt das Bündel ganz, passiert
nichts - OTA ist optional, das ist der normale Zustand.

Beide Pfade an einem Mock-Zielordner geprüft: passende Versionen melden
"OTA-Bündel passt zur Integration" ohne Restliste-Eintrag; eine testweise
erhöhte Manifest-Version (danach byte-genau zurückgesetzt, gegen HEAD
gegengeprüft) erzeugt die Warnung und landet als Restliste-Punkt 1.

VERSIONIERUNG.md: "Was du tun musst" nennt den OTA-Neubau jetzt als
eigenen nummerierten Schritt, statt ihn ganz auszulassen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 09:32:36 +02:00
parent ba182cb180
commit 2ea01ce2ce
3 changed files with 65 additions and 5 deletions
@@ -106,6 +106,33 @@ if (-not $quelle) {
$version = (Get-Content (Join-Path $quelle "manifest.json") -Raw | ConvertFrom-Json).version
Gut "Quelle: $quelle (Version $version)"
# ------------------------------------------------ OTA-Bündel auf Stand prüfen
# Das Bündel für die iOS-App (frontend\app\bundle.json, gebaut von
# companion-app\scripts\ota-paket.ps1) trägt seine eigene, zum Bauzeitpunkt
# eingefrorene Versionsnummer. Ändert sich manifest.json's Version, ohne dass
# jemand "npm run ota" erneut laufen lässt, bekommt die App zwei
# widersprüchliche Signale gleichzeitig: die Hinweisleiste sagt "du bist
# veraltet" (vergleicht gegen die live gelesene manifest-Version), die
# Update-Seite sagt "du bist aktuell" (vergleicht gegen das eingefrorene, nun
# falsche Bündel) - und es gibt keinen Weg, das Update zu bekommen, bis jemand
# den Widerspruch bemerkt. Das ist kein Zustand, den ein Installer schweigend
# durchwinken sollte - hier ist der eine Ort, an dem jede Auslieferung
# durchläuft, also der einzige verlässliche Punkt für diese Prüfung.
#
# Ein fehlendes Bündel ist dagegen kein Fehler: OTA ist eine optionale
# Zusatzfunktion, nicht jede Installation liefert eins mit.
$buendelInfo = Join-Path $quelle "frontend\app\bundle.json"
if (Test-Path $buendelInfo) {
$buendelVersion = (Get-Content $buendelInfo -Raw | ConvertFrom-Json).version
if ($buendelVersion -ne $version) {
Warnung "OTA-Bündel (frontend\app\bundle.json) steht auf Version $buendelVersion, die Integration auf $version."
Write-Host " Die App-Update-Funktion würde bis zur Behebung falsche Ergebnisse zeigen." -ForegroundColor Yellow
[void]$restliste.Add("OTA-Bündel ist veraltet (Version $buendelVersion statt $version): in companion-app\ 'npm run ota' ausführen, dann dieses Skript erneut laufen lassen.")
} else {
Info "OTA-Bündel passt zur Integration (Version $buendelVersion)"
}
}
# ---------------------------------------------------------------- Ziel finden
if (-not $Ziel) {
Schritt "Suche Home Assistant ..."