Repository navigation
Conversation
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
July 14, 2026 15:17
0b543c1 to
972da7a
Compare
mho22
added a commit
that referenced
this pull request
Jul 14, 2026
…-module extensions - Bump kandelo submodule f9c17d13 -> 9a7a6791 (current main tip). Main is still ABI v39, matching the immutable binaries-abi-v39 release assets. - Replace `kandelo/scripts/fetch-binaries.sh` + the Rust toolchain CI step with `scripts/fetch-kandelo-binaries.mts`, which resolves binaries from the pinned index in `scripts/kandelo-pinned-binaries-index.toml` (immutable release assets, homedir cache, Windows-safe, no toolchain). `scripts/generate-kandelo-pinned-index.mts` regenerates the index. - Wire the zip.so / curl.so / phar.so PHP side modules into both php-fpm (boot.ts argv + extensions mount at /usr/lib/php/extensions) and the `php` CLI spawns (php-api.ts PHP_EXTENSION_ARGS). Phar is built shared by kandelo; wp-cli.phar needs the Phar class. - Kernel spawns run as uid 0, so export WP_CLI_ALLOW_ROOT=1 in the spawn env, and guard the STDIN/STDOUT/STDERR defines in the wp-cli blueprint step (the kernel CLI SAPI predefines them). - Attach kandelo's TCP network backend (enableTcpNetwork) and point curl.cainfo at the kernel-installed CA bundle; add curl-https.spec. - Raise the nginx-ready timeout to 180s and retry the wp-admin/install.php POST under load (loaded CI runners cold-start several kernels at once). Ported down from the kandelo-beta branch (PR #3957) as the CLI-layer slice of the stack rework. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mho22
added a commit
that referenced
this pull request
Jul 14, 2026
…-module extensions - Bump kandelo submodule f9c17d13 -> 9a7a6791 (current main tip). Main is still ABI v39, matching the immutable binaries-abi-v39 release assets. - Replace `kandelo/scripts/fetch-binaries.sh` + the Rust toolchain CI step with `scripts/fetch-kandelo-binaries.mts`, which resolves binaries from the pinned index in `scripts/kandelo-pinned-binaries-index.toml` (immutable release assets, homedir cache, Windows-safe, no toolchain). `scripts/generate-kandelo-pinned-index.mts` regenerates the index. - Wire the zip.so / curl.so / phar.so PHP side modules into both php-fpm (boot.ts argv + extensions mount at /usr/lib/php/extensions) and the `php` CLI spawns (php-api.ts PHP_EXTENSION_ARGS). Phar is built shared by kandelo; wp-cli.phar needs the Phar class. - Kernel spawns run as uid 0, so export WP_CLI_ALLOW_ROOT=1 in the spawn env, and guard the STDIN/STDOUT/STDERR defines in the wp-cli blueprint step (the kernel CLI SAPI predefines them). - Attach kandelo's TCP network backend (enableTcpNetwork) and point curl.cainfo at the kernel-installed CA bundle; add curl-https.spec. - Raise the nginx-ready timeout to 180s and retry the wp-admin/install.php POST under load (loaded CI runners cold-start several kernels at once). Ported down from the kandelo-beta branch (PR #3957) as the CLI-layer slice of the stack rework. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
2 times, most recently
from
July 19, 2026 17:24
37e94b4 to
fdc5117
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
July 20, 2026 04:22
40cec0d to
03c71da
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
August 11, 2026 16:35
4751714 to
c4ee771
Compare
4 tasks
mho22
force-pushed
the
playground-web-kandelo-beta
branch
2 times, most recently
from
August 12, 2026 07:43
682170a to
a1b3822
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
2 times, most recently
from
August 12, 2026 10:31
4eb0a57 to
bb3cad6
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
August 12, 2026 12:15
cb2f551 to
d4ccbd6
Compare
mho22
marked this pull request as ready for review
August 12, 2026 13:18
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
August 13, 2026 12:33
bb3cad6 to
4cb3c28
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
August 13, 2026 14:58
d4ccbd6 to
4019733
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
August 24, 2026 11:01
4cb3c28 to
687b9ee
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
August 24, 2026 11:01
4019733 to
dfd6fda
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
August 24, 2026 11:27
687b9ee to
0adbb30
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
August 24, 2026 11:27
dfd6fda to
847977b
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
October 18, 2026 11:07
0adbb30 to
70b2f46
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
October 18, 2026 12:09
847977b to
be69ae0
Compare
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
October 18, 2026 12:28
70b2f46 to
ceade5f
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
2 times, most recently
from
October 18, 2026 13:05
efb9f7b to
e17b4ee
Compare
mho22
force-pushed
the
playground-web-experimental-posix-kernel
branch
from
October 18, 2026 13:07
ceade5f to
3dfe080
Compare
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
October 18, 2026 13:12
4fc4e87 to
e17b4ee
Compare
`assertLikelyCompatibleRemotePath` rejected every pathname except `/remote.html`, so a kernel-mode session pointing the iframe at `/remote-posix-kernel.html` threw "Invalid remote URL" before booting. The remote check now accepts both entries and the error message lists the accepted pathnames.
`getRemoteUrl` points the remote iframe at `/remote-posix-kernel.html` when `?experimental=kandelo` is present. The kernel remote needs `SharedArrayBuffer`, which browsers only grant on cross-origin isolated pages, so when the page is not isolated the website falls back to the classic runtime with a warning instead of failing inside the kernel worker. `PlaygroundRoute.site` preserves the `experimental` param when it rewrites a stored-site URL — dropping it would silently switch opted-in sessions back to the classic runtime when selecting a saved site.
`/remote-posix-kernel.html` is served cross-origin isolated (COOP `same-origin`, COEP `require-corp`, Document-Isolation-Policy) so its worker can allocate `SharedArrayBuffer`. `/` and `/index.html` only opt into isolation when `?experimental=kandelo` is set, because COOP `same-origin` breaks the GitHub OAuth popup for everyone else; they use COEP `credentialless` to keep cross-origin subresources loading without CORP headers. Dedicated worker scripts must carry a COEP header compatible with the document that spawns them; the dev server sets it on every response, production did not, so the kernel remote's workers and the website's OPFS workers failed to load. `playground_is_worker_script` serves the worker entries with COEP `require-corp`, which satisfies both the `require-corp` iframe and the `credentialless` parent, and keeps the hash-named files edge-cacheable. `custom-redirects-lib.php` covers the PHP deployment and `.htaccess` mirrors the headers for the static one; `tests.php` covers the new branches.
… artifact Adds the `build-experimental-posix-kernel` nx target and gives `vite.posix-kernel.config.ts` a build section: entry `remote-posix-kernel.html`, its own `dist/packages/playground/remote-posix-kernel` output so the classic and kernel asset graphs never overwrite each other, and the classic worker output rules so the shared service worker resolves to the same `/sw.js` — the artifact ships the classic-built copy. The build needs the `kandelo/` submodule, which regular website builds do not check out, so it is not part of the website build graph: `deploy-website.yml` invokes the target before the website build; `build:wasm-wordpress-net` packages the output only when present. The kernel binaries come from `@wp-playground/posix-kernel-builds`.
mho22
force-pushed
the
playground-web-kandelo-beta
branch
from
October 18, 2026 17:07
e17b4ee to
af405ba
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds an experimental
?experimental=kandeloopt-in that runs WordPress Playground Web on the wasm-posix-kernel (kandelo) runtime instead of the classic PHP worker.Built on top of #3635 (the kernel-mode web proof of concept); this PR is the opt-in wiring plus the deployment glue needed to actually serve it.
What it does
@wp-playground/client) —assertLikelyCompatibleRemoteOriginaccepts/remote-posix-kernel.htmlalongside/remote.html, so kernel-mode sessions boot instead of throwing "Invalid remote URL".getRemoteUrlpoints the remote iframe at/remote-posix-kernel.htmlwhen?experimental=kandelois present. The kernel remote needsSharedArrayBuffer, which the browser only grants on cross-origin isolated pages, so when the page is not isolated we fall back to the classic runtime with a console warning instead of failing inside the worker.PlaygroundRoute.sitepreserves theexperimentalparam when rewriting a stored-site URL (dropping it would silently switch a saved-site selection back to classic)./remote-posix-kernel.htmlis served cross-origin isolated (COOPsame-origin, COEPrequire-corp,Document-Isolation-Policy)./and/index.htmlopt into isolation only under?experimental=kandelo, because COOPsame-originotherwise breaks the GitHub OAuth popup for everyone else; those use COEPcredentiallessto keep cross-origin subresources loading without CORP headers. Dedicated worker scripts (the kernel remote's worker entries and the website's OPFS workers) are served with COEPrequire-corp: a dedicated worker script must carry a COEP header compatible with the document that spawns it, the dev server sets headers on every response, production did not — without this the workers fail to load.custom-redirects-lib.phpcovers the PHP deployment,.htaccessmirrors the headers for the static one.build-experimental-posix-kernelnx target builds/remote-posix-kernel.htmlfor production via a new build section invite.posix-kernel.config.ts: its owndist/packages/playground/remote-posix-kerneloutput so the classic and kernel asset graphs never overwrite each other, plus the classic worker output rules so the shared service worker resolves to the same/sw.js(the artifact ships the classic-built copy). The build imports the kandelo host source from thekandelo/submodule and the kernel binaries from@wp-playground/posix-kernel-builds. Regular website builds do not check out the submodule, so the target is not part of the website build graph:deploy-website.ymlruns it before the website build, andbuild:wasm-wordpress-netpackages the output only when present.Tests
client/src/index.spec.ts— client accepts the kernel-mode remote entry pathname.website/src/lib/config.spec.ts— runtime selection and the not-isolated fallback (+ warning).website/src/lib/state/url/router.spec.ts— theexperimentalparam is preserved across stored-site URL rewrites.website-deployment/tests.php— the new cross-origin-isolation and worker-script header branches, plus the special-treatment routing that serves them via PHP.website/playwright/e2e/posix-kernel/experimental-kandelo-param.spec.ts— e2e asserting the iframe entry URL swaps with the param.The full chromium kernel e2e suite passes on this head: 117 passed, 10 skipped. Two dock-pane tests in
website-ui.spec.tstimed out once under load and passed on 3 reruns each.Verified end to end against a static server replaying the production header logic: the kandelo-opted artifact boots WordPress on first load and on the service-worker-controlled reload, and the classic mode stays non-isolated with cross-origin embeds loading.
Breaking changes
None.