# noahROBOT Pairing und Rollen

## Rollen

- `head`: Augen, sichtbare Medienfreigabe und Sprache; keine direkte Fahrt
- `controller`: Touch-Dead-Man, STOP/E-Stop und Telemetrie; keine Administration
- `admin`: lokale Einrichtung, Diagnose, Widerruf, Updates und Gate-Einsicht
- `viewer`: nur Status und freigegebener lokaler Kamerastream

## Ablauf

1. Gateway erzeugt lokal eine zufaellige sechsstellige PIN fuer maximal 300 s.
   Nach Ablauf wird beim naechsten Status-/Health-Zugriff automatisch eine neue
   PIN erzeugt; eine abgelaufene PIN bleibt ungueltig.
2. QR enthaelt lokale HTTPS-URL und die kurzlebige PIN, kein Dauertoken.
3. Claim ist rate-limitiert; nach fuenf Fehlern folgt eine 60-s-Sperre.
4. Der Gateway speichert nur gesalzene Token-Hashes.
5. Das Browsergeraet speichert sein widerrufbares Sitzungstoken pro Gateway-Origin.
6. Neuer Browser bzw. geloeschter Speicher erfordert neues Pairing.

PINs und Tokens erscheinen nicht in Gateway-, Browser- oder Diagnoseprotokollen.
Pairing aktiviert weder `ARM` noch `DRIVE` und aendert
`realMotorControlEnabled=false` nicht.

Live-Abnahme 2026-07-16: QR-Origin-Schutz, vier Rollen, zwei Controller,
Admininventar, Widerruf, fuenf Fehlversuche, 60-s-Sperre, automatische
Entsperrung und vollstaendige Testgeraete-Bereinigung bestanden.

## Controller-Lease

Genau ein `controller` besitzt eine kurze Lease. Viewer, Head und Admin duerfen
STOP/E-Stop ausloesen, aber nicht fahren. Bei Socket-Close, Hintergrund,
Pointer-Abbruch, Lease-Timeout oder Reconnect folgt STOP; nach Reconnect beginnt
der Zustand ohne Bewegungsfortsetzung. Die Live-Abnahme endete mit verriegeltem
E-Stop, `moving=false` und ohne Controllerbesitz.

## Widerruf

Das eigene Geraet kann sich entkoppeln; Admin darf lokal andere Geraete
widerrufen. Verlust/Verkauf eines Geraets erfordert sofortigen Widerruf. Ein
Zertifikatswechsel ersetzt keinen Pairingwiderruf.
