
# Isolation

Rudel ist ein anfragebasiertes Overlay-System. Bei einer ausgewählten Anfrage werden Sandbox-Datenbanktabellen und Sandbox-Theme-Dateien verwendet, während die Host-WordPress-Installation weiterhin ausgeführt wird.

## Pro Sandbox isoliert

### WordPress-Tabellen

Jede Sandbox erhält ein generiertes Tabellenpräfix: das Host-Präfix plus die ersten sieben Hexadezimalzeichen der MD5 der Sandbox-ID.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel wechselt das Tabellenpräfix von WordPress, bevor WordPress den Startvorgang abschließt. Dadurch liest und schreibt jede Abfrage einer Sandbox-Anfrage die Sandbox-Kopien.

### Benutzer

Die Tabellen `users` und `usermeta` werden mit dem Rest geklont. Zum Erstellungszeitpunkt enthält eine Sandbox die Benutzer und Passwörter des Hosts. Danach wirken sich im Sandbox-System erstellte, geänderte oder gelöschte Benutzer nicht auf den Host aus, und Änderungen am Host werden nicht in die Sandbox übernommen.

### Dateien des aktiven Themes

Das ausgewählte Theme wird in das Sandbox-Verzeichnis kopiert:

```text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
```

Ist das Theme ein Child-Theme, kopiert Rudel auch das übergeordnete Theme, damit die Vorlagenbeziehung gültig bleibt. Eine Sandbox stellt immer das bei ihrer Erstellung gespeicherte Theme bereit; ein Theme-Wechsel innerhalb der Sandbox hat keine Auswirkung.

## Gemeinsam mit dem Host genutzt

- WordPress-Core
- Plugin-Dateien
- hochgeladene Mediendateien

Ein auf dem Host installiertes oder aktualisiertes Plugin wird in allen Sandboxes installiert oder aktualisiert. Welche Plugins aktiv sind, steht in der Options-Tabelle; der Aktivierungsstatus gilt daher pro Sandbox. In einer Sandbox hochgeladene Dateien landen im Upload-Verzeichnis des Hosts. So bleibt das Erstellen von Sandboxes schnell und `WP_CONTENT_DIR` wird nicht global ersetzt.

Lass Rudel in jeder Sandbox selbst aktiv. Die E-Mail-Sperre und das Theme-Overlay werden vom Plugin ausgeführt. Wird es bei ausgewählter Sandbox deaktiviert, wird außerdem die Bootstrap-Zeile aus der gemeinsam genutzten `wp-config.php` entfernt. Dadurch wird die Sandbox-Auswahl für die gesamte Installation ausgeschaltet ([Issue #13](https://github.com/inline0/rudel/issues/13)).

## Sandbox auswählen

HTTP-Anfragen wählen eine Sandbox über:

- den Header `X-Rudel-Environment` (veralteter Alias `X-Rudel-Sandbox`)
- das Cookie `rudel_environment` (veralteter Alias `rudel_sandbox`)

Rudel setzt oder löscht das Cookie nie. Lösche es, um zum Host zurückzukehren. Der Sandbox-Eintrag in der Admin-Leiste verlinkt zur Host-URL, lässt das Cookie aber bestehen ([Issue #10](https://github.com/inline0/rudel/issues/10)).

WP-CLI-Befehle wählen eine Sandbox über:

- die Umgebungsvariable `RUDEL_ENVIRONMENT`
- eine `--url`, deren Host mit der Sandbox-ID beginnt, zum Beispiel `--url=http://alpha-3be7.example.test`

Die Auswahl ist nicht authentifiziert. Jeder Client, der die Website erreichen kann und eine gültige Sandbox-ID sendet, erhält Zugriff auf diese Sandbox. Sandbox-IDs (Name plus vier Hexadezimalzeichen) sind leicht zu erraten. Betrachte die Sandbox-Auswahl nicht als Zugriffsschutz; sichere einen öffentlichen Host auf Webserver- oder Netzwerkebene ab.

## Standardwerte für Anfragen

Für eine ausgewählte Anfrage setzt Rudel:

- blockiert ausgehende E-Mails über einen `pre_wp_mail`-Filter
- setzt `WP_TEMP_DIR` auf das Sandbox-`tmp`-Verzeichnis
- setzt `WP_CACHE_KEY_SALT` auf einen Sandbox-spezifischen Wert, damit persistente Objekt-Caches die Sandbox-Schlüssel getrennt halten
- ermöglicht die `WP_DEBUG`-Protokollierung für die Sandbox-`debug.log` sowie Authentifizierungsschlüssel und -Salts, die aus der Sandbox-ID abgeleitet werden

Der Bootstrap definiert jede dieser Konstanten nur, wenn `wp-config.php` sie noch nicht definiert hat. Eine Standardinstallation von `wp-config.php` definiert `WP_DEBUG` sowie alle Schlüssel und Salts. Daher verwenden Sandbox-Anfragen bei einer solchen Installation die Debug-Einstellung und Schlüssel samt Salts des Hosts ([Issue #4](https://github.com/inline0/rudel/issues/4)). Da auch die Benutzer geklont werden, kann ein Anmelde-Cookie des Hosts in einer Sandbox gültig sein.

## Laufzeit-Metadaten

Rudel-Laufzeitmetadaten bleiben in den MySQL-Tabellen des Hosts WordPress:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Diese Tabellen sind die maßgebliche Datenquelle von Rudel. Umgebungsverzeichnisse enthalten verwaltete Dateien und Artefakte, aber keinen Laufzeitregisterstatus.
