# noahROBOT Installation und stufenweise Inbetriebnahme

Status: Software-Release 1.2.0 ist auf dem PELADN mit Windows 11 x64
installiert. PWA, Gateway, vier Kerndienste, Roboternetz-Komponente, lokales HTTPS, mDNS, REST, WebSocket,
Pairing, Rollen und Simulation wurden im WLAN live getestet. Es wurde keine
Firmware geflasht, kein serieller Port geoeffnet und keine Motorik bestromt.

## 1. Ziel und Grenzen

Windows bleibt unveraendert das Betriebssystem. Der Installer formatiert keine
Datentraeger und aendert keine SSH-Kennwortpolicy. Der
Wi-Fi-Direct-Legacy-Netzwerkdienst wird zunächst deaktiviert installiert und
erst über den getrennten Backup-/Recovery-Workflow freigegeben. Die
Auslieferung erzwingt:

```json
{
  "mode": "simulation",
  "serial": { "enabled": false },
  "realMotorControlEnabled": false
}
```

Der reale Hardwarepfad bleibt zusaetzlich durch die Nachweise aus
`docs/HARDWARE.md`, `docs/WIRING.md` und `docs/SAFETY.md` geschlossen.

## 2. Voraussetzungen

- vorhandenes Windows 10/11 x64 mit lokalem Administratorkonto
- Netzstrom und stabile private Netzwerkverbindung
- Funduino, L298N und Motorversorgung physisch getrennt
- Windows Terminal oder PowerShell 5.1 als Administrator
- Internet fuer den Bootstrap oder das vollstaendige Offline-Release
- aktuelles Backup wichtiger Windows-Daten

Die reale Windows-Edition, Buildnummer, Datentraegerbelegung, Netzadapter und
der OpenSSH-Zustand muessen zuerst mit `scripts/windows/inventory.ps1`
festgehalten werden. Das Skript ist lesend und gibt keine Produktschluessel,
Passwoerter oder privaten Schluessel aus.

## 3. Paket pruefen

Auf dem Mac:

```bash
shasum -a 256 noahrobot-windows-1.2.0.zip
```

Unter Windows:

```powershell
Get-FileHash .\noahrobot-windows-1.2.0.zip -Algorithm SHA256
Expand-Archive .\noahrobot-windows-1.2.0.zip -DestinationPath C:\noahrobot-setup
Set-Location C:\noahrobot-setup\noahrobot-windows-1.2.0
```

Der Wert muss mit `robot/downloads/SHA256SUMS` uebereinstimmen. Danach die
Dateien gegen `MANIFEST.sha256` pruefen. Das Archiv enthaelt keine `.env`, Keys,
Tokens oder produktive MediaWiki-Konfiguration.

## 4. Trockenlauf und Installation

Zuerst ohne Aenderungen:

```powershell
Set-ExecutionPolicy -Scope Process Bypass
.\scripts\windows\inventory.ps1 -OutputPath .\windows-inventory.json
.\scripts\windows\bootstrap-admin.ps1
```

Die Ausgabe und das Inventar pruefen. Erst danach lokal mit UAC-Bestaetigung:

```powershell
.\scripts\windows\bootstrap-admin.ps1 -Apply
```

`-Yes` ist nur fuer eine beobachtete, bereits gepruefte Wiederholung gedacht.
Der Bootstrap:

1. sichert noahROBOT-Konfiguration und den lesbaren OpenSSH-Zustand,
2. versucht einen Windows-Wiederherstellungspunkt,
3. installiert bei Bedarf Python 3.12 x64, Arduino CLI und AVR-Core 1.8.8,
4. prueft Caddy 2.11.4 und WinSW 2.12.0 per SHA-256,
5. legt restriktive ACLs und zwei Regeln fuer privates Netz an,
6. erstellt ein separat rueckrollbares AC-Energieschema,
7. installiert Release 1.2.0, vier Kerndienste und die getrennte
   Roboternetz-Komponente,
8. prueft Health, Readiness, Hardware-Gate und HTTPS-Konfiguration.

Logs liegen mit Zeitstempel unter
`C:\ProgramData\noah-robot\logs`. Secrets werden nicht protokolliert.

## 5. Installierte Struktur

```text
C:\Program Files\noah-robot\
  bin\                         caddy.exe
  service\                     WinSW.exe und Dienst-XML
  releases\1.2.0\              unveraenderliches Release
  current\                     Junction auf das aktive Release
  previous\                    Rueckfall-Junction, falls vorhanden
C:\ProgramData\noah-robot\
  config\                      lokale, restriktive Konfiguration
  secrets\                     nur DPAPI-geschuetzte lokale Geheimnisse
  data\                        Pairing-/Laufzeitdaten
  certificates\public\        nur CA-Zertifikat und Fingerabdruck
  logs\ diagnostics\ backups\
```

Private CA-Schluessel bleiben ausserhalb des Webroots und duerfen nicht
exportiert werden.

## 6. Abnahme nach Installation

```powershell
.\scripts\windows\status.ps1
.\scripts\windows\verify-bootstrap.ps1
.\scripts\windows\diagnose.ps1
.\scripts\windows\verify-diagnostics-privacy.ps1
.\scripts\windows\prewiring-acceptance.ps1
```

Erwartet werden vier laufende Kerndienste, ein vorbereiteter Netzwerkdienst
oder der interaktive Publisher-Task,
`GET /healthz` = 200,
`GET /readyz` = 200, `mode=simulation`, `serial.enabled=false` und
`hardwareGate=closed`. Die Vorverkabelungs-Abnahme prueft zusaetzlich Pairing,
Rollen, WebSocket, Controller-Lease, STOP/E-Stop, Reconnect und Rate-Limits und
speichert weder PINs noch Tokens. Auf einem zweiten Geraet wird zuerst der
CA-Fingerprint aus einem getrennten Kanal verglichen, dann das CA-Zertifikat
installiert und `https://noah-robot.local/robot/` geoeffnet.

Für den Vor-Ort-Start genügt anschließend auf dem Mini-PC:

```text
NOAH-ROBOT SCHULSTART.cmd
```

Der Starter verwendet die angemeldete Windows-Sitzung für die Wi-Fi-Direct-
Werbung und öffnet drei QR-Codes. Falls das SSID extern nicht sichtbar ist,
liefert `NOAH-ROBOT WLAN-DIAGNOSE.cmd` einen secret-freien Hoststatus.

## 7. Gestufte weitere Inbetriebnahme

| Stufe | Erlaubt | Gate zum naechsten Schritt |
| --- | --- | --- |
| Windows/Simulation | PWA, Sprache, Kamera mit Einwilligung, Simulator | Dienste und Datenschutzchecks gruen |
| Funduino erkennen | nur lesendes USB-/COM-Inventar | exakte VID/PID/Seriennummer dokumentiert |
| STATUS-only | Compile; Flash nur nach gesonderter schriftlicher Freigabe und ohne L298N | BOOT/STATUS/STOP stabil |
| Verdrahtungsplanung | stromlos, Fotos/Datenblaetter/Messplan | `WIRING.md` vollstaendig bestaetigt |
| Motor-Labortest | nur mit eigenem Hardware-Gate | Not-Stopp, Stromlimit, freie Raeder, zweite Person |
| Realfahrt | derzeit verboten | separate schriftliche Freigabe erforderlich |

## 8. Update, Rueckfall und Deinstallation

Updates starten mit `update.ps1` im Trockenlauf. Ein Releasewechsel verwendet
Junctions und prueft die Simulation vor dem Umschalten. Bei Fehlern:

```powershell
.\scripts\windows\rollback.ps1 -Apply
```

Die Deinstallation ist ebenfalls standardmaessig ein Trockenlauf:

```powershell
.\scripts\windows\uninstall.ps1
```

Details und Datenaufbewahrung stehen in `docs/UPDATE_ROLLBACK.md`. Windows,
OpenSSH und fremde Anwendungen werden dabei nicht entfernt.
