Isolation
Rudel is a request-selected overlay system. A selected request uses sandbox database tables and sandbox theme files while still running through the host WordPress installation.
Isolated per sandbox
WordPress tables
Each sandbox gets a generated table prefix: the host prefix plus the first seven hex characters of the MD5 of the sandbox ID.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel switches the WordPress table prefix before WordPress finishes booting, so every query in a sandbox request reads and writes the sandbox copies.
Users
The users and usermeta tables are cloned with the rest. A sandbox starts with the host's users and passwords at creation time; after that, users created, changed or deleted in the sandbox do not affect the host, and host changes do not reach the sandbox.
Active theme files
The selected theme is copied into the sandbox directory:
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
If the theme is a child theme, Rudel also copies the parent theme so the template relationship stays valid. A sandbox always serves the theme recorded at creation; switching themes inside the sandbox has no effect.
Shared with the host
- WordPress core
- plugin files
- uploaded media files
A plugin installed or updated on the host is installed or updated for every sandbox. Which plugins are active is stored in the options table, so activation state is per sandbox. Uploads made inside a sandbox land in the host uploads directory. This keeps sandbox creation fast and avoids replacing WP_CONTENT_DIR globally.
Keep Rudel itself active inside every sandbox. Its mail blocking and theme overlay run from the plugin, and deactivating it while a sandbox is selected also removes the bootstrap line from the shared wp-config.php, which switches off sandbox selection for the whole install (issue #13).
Selecting a sandbox
HTTP requests select a sandbox through:
- the
X-Rudel-Environmentheader (legacy aliasX-Rudel-Sandbox) - the
rudel_environmentcookie (legacy aliasrudel_sandbox)
Rudel never sets or clears the cookie. Delete it to return to the host; the Sandbox item in the admin bar links to the host URL but leaves the cookie in place (issue #10).
WP-CLI commands select a sandbox through:
- the
RUDEL_ENVIRONMENTenvironment variable - a
--urlwhose host starts with the sandbox ID, such as--url=http://alpha-3be7.example.test
The selector is not authenticated. Any client that can reach the site and sends a valid sandbox ID gets that sandbox, and sandbox IDs (name plus four hex characters) are easy to guess. Do not treat sandbox selection as an access-control boundary; protect a public host at the web server or network level.
Request defaults
For a selected request, Rudel:
- blocks outbound email through a
pre_wp_mailfilter - sets
WP_TEMP_DIRto the sandboxtmpdirectory - sets
WP_CACHE_KEY_SALTto a sandbox-specific value so persistent object caches keep sandbox keys apart - offers
WP_DEBUGlogging to the sandboxdebug.logand authentication keys and salts derived from the sandbox ID
The bootstrap defines each of these constants only if wp-config.php has not defined it already. A standard wp-config.php defines WP_DEBUG and all keys and salts, so on such an install sandbox requests use the host's debug setting and the host's keys and salts (issue #4). Because the users are cloned too, a host login cookie can be valid in a sandbox.
Runtime metadata
Rudel runtime metadata stays in host WordPress MySQL tables:
wp_rudel_environments
wp_rudel_worktrees
These tables are Rudel's source of truth. Environment directories contain managed files and artifacts, not runtime registry state.