# noahROBOT Web-Deployment

Status am 2026-07-14: Release 1.2.0 ist lokal vorbereitet. Eine Live- oder
Staging-Ausbringung ist erst nach Serverzugangs-, Backup- und Smoke-Test-Pruefung
zulaessig. Dieses Deployment betrifft nur statische `/robot/`-Assets; es nimmt
keine Datenbank-, Domain- oder `LocalSettings.php`-Aenderung vor.

## 1. Zieltrennung

- `https://staging.moocwiki.org/robot/` ist die verpflichtende erste Zielstufe.
- Die bestehende oeffentliche `/robot/`-Route darf erst nach gruenem Staging-Gate
  auf Release 1.2.0 umgeschaltet werden.
- Der lokale Windows-Gateway bleibt ausschliesslich im privaten Netz. Er wird
  weder auf den MediaWiki-Server kopiert noch aus dem Internet exponiert.

## 2. Artefakte

Das Web-Release besteht aus `robot/` plus den von der PWA importierten,
versionierten Modulen unter `noah/js/`. Windows-ZIP und Offline-Wheelhouse sind
Downloadartefakte, keine Serverlaufzeit. Vor Upload:

```bash
node --check robot/app.js
node --check robot/service-worker.js
node tools/noah_robot_pwa_static_selftest.mjs
python3 tools/build_noah_robot_windows_release.py
shasum -a 256 robot/downloads/noahrobot-windows-1.2.0.zip
```

## 3. Backup und Staging

1. Zielhost und Webroot aus der vorhandenen, freigegebenen Deployment-Konfiguration
   ermitteln; keine `.env` oder Produktiv-Secrets ausgeben.
2. Remote-Zeitstempel und freien Speicher pruefen.
3. Aktive statische Robot- und NOAH-Module in ein unveraenderliches,
   zeitgestempeltes Backup kopieren.
4. Release in ein neues Staging-Verzeichnis hochladen.
5. serverseitig Dateiliste und SHA-256 pruefen.
6. atomar den Staging-Symlink umschalten.
7. HTML, Manifest, Service Worker, JS-Module, Installationsseite und Downloads
   per HTTPS abrufen.

Remote-Logs enthalten nur Zeitpunkt, Release-ID, Dateianzahl, Hash und
Exitstatus. Keine Tokens, Cookies oder Konfigurationsinhalte loggen.

## 4. Staging-Gate

- HTTP 200 fuer `/robot/`, `manifest.webmanifest`, `service-worker.js`,
  `installation.html` und alle importierten Module
- `Content-Type` fuer JS, Manifest und ZIP korrekt
- Service-Worker-Scope bleibt `/robot/`
- API-, Auth-, Token-, Medien- und Zertifikatsantworten werden nicht gecacht
- Setup, Gesicht, NOAH-Talk, Einstellungen und Steuerung funktionieren
- Mikrofon-/Kamerazugriff startet nur nach sichtbarer Einwilligung
- Simulation ist Default; ein Sprachfahrbefehl erreicht keine reale Hardware
- keine MediaWiki-Regression und keine Browser-Konsolenfehler

## 5. Live-Umschaltung

Nur nach dokumentiert gruenem Staging-Gate und vorhandener Live-Freigabe:

1. aktuellen Live-Symlink/Release-ID erfassen,
2. Live-Backup und freien Speicher bestaetigen,
3. exakt das auf Staging gepruefte Release atomar aktivieren,
4. Smoke-Checks ohne Datenbankzugriff ausfuehren,
5. Cache-/Service-Worker-Upgrade von einer 1.1.1-Installation pruefen,
6. Abnahmezeit und Release-Hash dokumentieren.

Die Domain, DNS, Webserver-Grundkonfiguration und MediaWiki-Datenbank bleiben
unveraendert.

## 6. Rueckfall

Bei einem fehlerhaften Smoke-Check sofort den zuvor erfassten Symlink
reaktivieren. Keine Datenbankwiederherstellung ist erforderlich, weil das
Release statisch ist. Danach erneut HTML, Manifest und Service Worker abrufen
und den Fehler ohne Secrets dokumentieren. Alte Releaseverzeichnisse erst nach
separater Aufbewahrungsentscheidung entfernen.
