Multi-Tenancy Changelog
Version 1.2.1 - Released on 2026-06-03
- Fix: route marketplace deployment API calls directly to the origin server to bypass Cloudflare challenge pages during release publishing
Version 1.2.0 - Released on 2026-06-03
- Fix: clean sovereign teardown credentials
- Fix: harden consume session handling
- New: add stateless tenant autologin
- Improved: absorb tenant globals fixes
- Fix: normalize same-machine host strings to unblock sovereign installs on Bedrock hosts
- Fix: auto-isolation produces sovereign tenants
- Fix: handle core sovereign extension hooks
- Fix: route legacy isolated networks at bootstrap
- New: replace Database_Router with deprecation stub (Phase 5.4)
- Fix: verify tenant grants for configured host
- Fix: allow CI to skip debug-log migration gate
- Fix: baseline debug log migration gate
- Fix: tolerate sovereign install user during migration verification
- Fix: align fixture user count with sovereign install
- Fix: mock synthetic tenant HTTP in wp-env e2e
- Fix: use valid tenant hostname in e2e fixture
- Fix: match migrate command options in e2e harness
- Fix: install addon tables before loading e2e fixture
- Fix: prepare mounted plugins for wp-env e2e
- Fix: execute wp-env commands through container shell
- Fix: align integration checkout with wp-env paths
- Fix: plumb configurable MySQL host binding
- Fix: prevent duplicate broadcast meta rows
- Fix: dedupe credential sitemeta rows
- Fix: update Site_Router::resolve_sovereign references to Site_Router::resolve
- New: provision users during sovereign migration
- New: add sovereign migration verification gates
- Fix: create_writer_user — use DDL admin, drop placeholder DDL, capture errors before close
- Fix: portable AS drain so verify-sovereign-push actually processes the queue
- Fix: bind all NOT NULL wp_posts columns in broadcast REPLACE INTO
- New: ADR-001 Phase 3-A9 — verify-sovereign-push + integration tests
- Improved: add Model Policy section — never Haiku for upstream-interfacing code
- New: implement Tenant_Schema_Bootstrap (ADR-001 Phase 3-A5)
- New: implement Tenant_DB_Writer (ADR-001 Phase 3-A4)
- New: implement Tenant_Bootstrap_Local (ADR-001 Phase 3-A1)
- New: remove Sovereign_Tenant_Endpoints class and registration (ADR-001 Phase 3-A0)
- New: ADR-001 Phase 3.10 — Per-gateway tenant-context audit
- New: ADR-001 Phase 3.6 — Network-side API audit log + daily summary
- New: ADR-001 Phase 5.6 — flip host_binding default to 'localhost'
- New: add scan_orphans command for orphan table cleanup
- New: ADR-001 Phase 3.3 — sovereign tenant REST endpoints
- New: ADR-001 Phase 5.1 — wp tenant verify-no-legacy pre-flight command
- New: Phase 2.2 — SSO purpose claim, jti replay nonce, 5-min exp cap
- New: ADR-001 Phase 2.3 — Network_User_Sync lazy SSO provisioning
- New: ADR-001 ph2.7 — SSO audit logging + network admin log viewer
- New: ADR-001 Phase 2.6 — origin pinning + SSO-gen counter revocation
- New: network admin 'Visit (SSO)' button for sovereign tenants
- New: ADR-001 Phase 2.4 — sovereign SSO query-arg handling
- New: guard sovereign-incompatible paths in Remote_SSO_Handler
- New: Phase 1 complete - tenant install, domain patch, charset fix
- New: Phase 1 routing fast-path + S1 fix opt-in
- New: ADR-001 + Phase 1 foundation (isolation_model column + registry awareness)
- Fix: match IF [NOT] EXISTS in DDL fallback regex
- Fix: normalize DB_HOST=localhost to 127.0.0.1 for FrankenPHP
- Fix: make deferred site creation reliable; neutralise orphan-row source
- Fix: opcache-safe registry wrappers + stable tenant_root
- New: per-subsite database + filesystem isolation (Stage 1)
- New: add Hostinger multi-tenancy capability
Version 1.1.2-beta.1 - Released on 2026-05-13
- Beta: First beta of 1.1.2 — see entry below for the full change list.
Version 1.1.2 - Released on 2026-XX-XX
- Fix: Add missing add_remote_sites_menu method on Remote_SSO_Handler to resolve admin menu error
- Fix: Route separate_db site creation through the configured node provider so per-site databases are provisioned consistently (#19)
- Chore: Rebrand marketplace URLs from multisiteultimate.com to ultimatemultisite.com (Plugin URI, Author URI, package homepage, author email)
- Chore: Harden composer archive excludes so internal dev directories (.beads, .agents, AGENTS.md, etc.) are not shipped to customers
Version 1.1.1 - Released on 2026-05-06
- Fix: Resolved parse error caused by duplicate handle_sso_login function definition
- Fix: SSO token validation now accepts simpler tokens issued by the main site's login flow
- Fix: Updated deprecated wu_sso_verify action to the current sso_verify parameter
Version 1.1.0 - Released on 2026-04-29
- New: Network Registry compiler generates a flat PHP file for request-time domain resolution without DB queries
- New: Credential Store with sodium encryption for secure database credential storage (env/file/meta refs)
- New: Database Router for single-DB-per-request routing, delegates to existing db-config for host network
- New: db-config.php overlay installed to WP_CONTENT_DIR on activation (LudicrousDB integration)
- New: Local Provider for MySQL database and user provisioning with dedicated DDL user
- New: Tenant filesystem class for per-tenant uploads, cache, and plugin directory isolation
- New: Per-tenant Docket Cache isolation with renamed overlay directories
- New: Privileged sidecar daemon and client for cross-server provisioning
- New: Marketplace catalog with BerlinDB table, model, and entitlement-gated install/uninstall
- New: MySQL grants auditor and cross-network query guard for security hardening
- New: WP-CLI tenant exec wrapper for running commands in tenant context
- New: WP-CLI tenant command for provisioning management
- New: WP-CLI static-site commands for per-domain static site serving
- New: Addon sunrise.php for customer network domain override at earliest WordPress lifecycle
- New: Subdomain resolution within tenant networks (e.g. restaurant.tenant.host)
- New: Loco Translate isolation directory in tenant layout
- Fix: Credential Store writes directly to host DB via mysqli, bypassing update_site_option() cross-table routing
- Fix: Network Registry fetch_customer_networks() uses direct host DB connection, prevents registry corruption in tenant context
- Fix: host_domains() uses direct host DB connection and base_prefix instead of blog-specific table_prefix
- Fix: Sunrise global declarations so overrides survive WP Ultimo method scope inclusion
- Fix: Sunrise resolves HTTP_HOST against tenant DB wp_blogs for correct subsite routing
- Fix: Symlink handling in regenerate() preserves Trellis shared files
- Fix: FrankenPHP socket compatibility (localhost to 127.0.0.1 for TCP)
- Fix: WP_HOME/WP_SITEURL constant override for tenant networks
- Improved: Build pipeline using composer archive matching WooCommerce addon pattern
- Improved: Deploy workflow with automated GitHub Release and WooCommerce marketplace delivery
Version 1.0.0 - Released on 2026-04-28
- New: Network-level database routing — per-request DB isolation via db-config.php overlay
- New: Credential Store with sodium encryption (env/file/meta credential references)
- New: Network Registry compiler — fast flat-PHP file read by db-config.php overlay
- New: Privileged sidecar daemon with Unix socket client and provider
- New: Tenant filesystem support with Local_Provider integration and sunrise constant injection
- New: Marketplace catalog with BerlinDB table, model, and entitlement-gated install/uninstall
- New: WP tenant CLI command for provisioning and tenant management
- New: Dedicated MySQL user for DDL provisioning operations (separate from query user)
- New: WP-CLI tenant exec wrapper for running commands in a specific tenant context
- New: Static filesystem class for per-domain static site serving
- New: WP-CLI static-site commands
- New: Addon sunrise.php for customer network override on early WordPress boot
- New: Resolve subdomain subsites within tenant networks
- New: Per-tenant Docket Cache isolation with renamed overlay directories
- New: Loco Translate isolation via per-tenant loco/ directory in tenant layout
- New: 12 hosting provider integrations (cPanel, Cloudways, RunCloud, GridPane, ServerPilot, Closte, Hestia, Enhance, Rocket.net, WP Engine, WPMUDEV, Cloudflare)
- New: MySQL grants auditor and cross-network query guard for security hardening
- Fix: PHP 8.2+ typed properties for database table instances
- Fix: FrankenPHP socket compatibility and sunrise customer network override
- Fix: Database Router fallback to include_once in sunrise context
- Fix: BerlinDB tables auto-install on activation
- Fix: Credential store writes directly to host DB; registry always reads host blogs table
- Fix: host_domains() uses direct host DB connection and base_prefix (not blog-specific prefix)
- Fix: fetch_customer_networks uses direct host DB query (not BerlinDB ORM)
- Fix: Resolve symlinks in regenerate() to preserve Trellis shared files
- Fix: Override WP_HOME/WP_SITEURL constants correctly for tenant networks
- Fix: Add global declarations so sunrise overrides survive method scope
- Fix: Use explicit DB name for subsite blog lookups in sunrise
- Improved: Skip plugin autoloader when Bedrock root autoloader has already loaded dependencies