From 7a1d23ec000d9cf7c510c579fc4eaf963166ee2d Mon Sep 17 00:00:00 2001 From: Eric Defore Date: Thu, 20 Aug 2026 16:11:31 -0400 Subject: [PATCH 1/2] Document the deferred switchover on a site that never loads wp-admin --- docs/conflict-handling.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/conflict-handling.md b/docs/conflict-handling.md index d4e3cb8..0f47278 100644 --- a/docs/conflict-handling.md +++ b/docs/conflict-handling.md @@ -64,6 +64,16 @@ standalone's own deactivation hook would otherwise run this early: a routine `fl in it would regenerate the rules before `init` declared a single post type, and every custom permalink on the site would start 404ing. +**A site that never loads wp-admin never resolves.** Every gate above needs an interactive admin +page view. Any website administered entirely over SFTP, Composer, or WP-CLI — one whose owner never +opens an admin screen in a browser — keeps the standalone active for as long as that holds. There +is still no fatal, because [the load guard](#the-load-guard) runs on every request and stands the +bundled copy down regardless; what waits is the *switchover*. The standalone, frozen at the version +installed, goes on serving in place of the bundled copy the host ships updates for until the first +interactive admin `GET` arrives. That is the price of never ending a non-admin request with a +redirect — one that would drop a visitor's POST or cut a WP-CLI run short — and on such a site the +switchover is simply deferred until then. + ## The redirect The standalone's code is already in memory by the time the conflict is resolved — WordPress From 4e7914b6098be888db4b86d6512abaf42f7a8acd Mon Sep 17 00:00:00 2001 From: Eric Defore Date: Fri, 21 Aug 2026 10:29:36 -0400 Subject: [PATCH 2/2] Point the switchover trigger at every resolution gate, not just the admin GET --- docs/conflict-handling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/conflict-handling.md b/docs/conflict-handling.md index 0f47278..afad46a 100644 --- a/docs/conflict-handling.md +++ b/docs/conflict-handling.md @@ -70,9 +70,9 @@ opens an admin screen in a browser — keeps the standalone active for as long a is still no fatal, because [the load guard](#the-load-guard) runs on every request and stands the bundled copy down regardless; what waits is the *switchover*. The standalone, frozen at the version installed, goes on serving in place of the bundled copy the host ships updates for until the first -interactive admin `GET` arrives. That is the price of never ending a non-admin request with a -redirect — one that would drop a visitor's POST or cut a WP-CLI run short — and on such a site the -switchover is simply deferred until then. +request that clears every gate above arrives. That is the price of never ending a non-admin request +with a redirect — one that would drop a visitor's POST or cut a WP-CLI run short — and on such a +site the switchover is simply deferred until then. ## The redirect