Skip to content

Commit 90c17ac

Browse files
committed
Merge origin/main into fix/pre-wordpress-request-dispatch
2 parents e40909d + 062ff5c commit 90c17ac

186 files changed

Lines changed: 45875 additions & 1361 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/agent-task-contracts.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ jobs:
9696
- run: npm run test:native-agent-task-playground-e2e
9797
- run: npm run test:native-agent-task-interruption
9898
- run: npm run test:trusted-apply-artifact-channel
99+
- run: npm run test:runtime-command-artifact-bounds
99100
- run: npm run test:redaction
100101
- run: npm run test:production-boundary-enforcement
101102
- run: npm run test:runtime-tool-policy

CHANGELOG.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,208 @@
22

33
All notable changes to this project will be documented in this file. Entries are generated by homeboy from git commits.
44

5+
## [0.15.0] - 2026-07-25
6+
7+
### Added
8+
- exercise AJAX and XML-RPC adversarial surfaces
9+
- add external MySQL runtime provider
10+
- complete supported adversarial campaigns
11+
- add WordPress adversarial Playground adapter
12+
- explore adaptive browser state graphs
13+
- run adversarial campaigns from recipes
14+
15+
### Changed
16+
- cover generated runtime secret evidence
17+
18+
### Fixed
19+
- require explicit plugin composer preparation
20+
- stabilize adaptive replay across volatile ids
21+
- enforce external database security boundaries
22+
- exclude dependency trees from readonly mounts
23+
- enforce adversarial HTTP action contracts
24+
- honor routed preview hosts in adaptive exploration
25+
- keep failed adaptive actions off frontier
26+
- generate unique action corpus selectors
27+
- fail closed on unapplied fault schedules
28+
29+
## [0.14.0] - 2026-07-24
30+
31+
### Added
32+
- add adversarial fuzz runtime contracts
33+
34+
### Changed
35+
- Handle cross-realm PHP-WASM failures
36+
- Narrow Playground worker terminalization
37+
- Terminate poisoned Playground workers
38+
- Exercise queued D1 artifact imports
39+
- Recover completed publication promotion
40+
- Complete provisioned site publication lifecycle
41+
- Accept external provisioning artifacts in local gate
42+
- Add public provisioning local gate
43+
- support native WP-CLI stress runner
44+
- Add authenticated provisioning artifact staging
45+
46+
### Fixed
47+
- Fix readonly mount symlink cycles
48+
- Fix PHPUnit WASM runtime rejection handling
49+
- preserve deferred WordPress hook lifecycle
50+
- defer WP-CLI wrapper cleanup to runtime owner
51+
- isolate concurrent WP-CLI wrapper scripts
52+
53+
## [0.13.2] - 2026-07-23
54+
55+
### Changed
56+
- Add one-time administrator claims
57+
- Add authenticated Cloudflare provisioning API core
58+
- Add durable Cloudflare operation lifecycle
59+
- Preserve lossless D1 rollback state
60+
- Preserve Durable Object class during D1 cutover
61+
- Stream large staged file materialization
62+
- Preserve glob strings in D1 config
63+
- Make emitted D1 configs portable
64+
- Provision Cloudflare D1 coordinator deterministically
65+
- Scope Cloudflare state by site identity
66+
- Import static artifacts into Cloudflare runtime
67+
- Fence Cloudflare coordinator cutovers
68+
- Adopt exact Cloudflare coordinator state
69+
- Reuse canonical publication snapshots
70+
- Bound Cloudflare publication scheduler CPU
71+
- Bound Cloudflare mutation memory
72+
- Drain Cloudflare publication in bounded jobs
73+
- Require explicit Cloudflare publication changes
74+
- Reconcile dependency overlay to consumer autoload layout
75+
76+
### Fixed
77+
- force fresh dist for release packages
78+
- honor MySQL contracts in managed PHPUnit
79+
- avoid inactive plugin dev autoloaders
80+
- contain readonly mount symlinks
81+
82+
## [0.13.1] - 2026-07-22
83+
84+
### Changed
85+
- Publish affected Cloudflare routes automatically (by Chris Huber)
86+
- Make Cloudflare revision coordination configurable (by Chris Huber)
87+
- Serve published WordPress routes without coordination (by Chris Huber)
88+
89+
### Fixed
90+
- Fix release artifact installability (by Chris Huber)
91+
92+
## [0.13.0] - 2026-07-21
93+
94+
### Changed
95+
- Persist mutable WordPress content in R2 (by Chris Huber)
96+
- Exercise canonical Cloudflare boot probe (by Chris Huber)
97+
- Bound retained recipe command evidence ([#1947](https://github.com/Automattic/wp-codebox/pull/1947)) (by Chris Huber)
98+
- Navigate multi-actor browser sessions ([#1948](https://github.com/Automattic/wp-codebox/pull/1948)) (by Chris Huber)
99+
- Load Cloudflare runtime dependencies from R2 (by Chris Huber)
100+
- Serve WordPress assets from R2 ranges (by Chris Huber)
101+
- Persist Cloudflare WordPress media in R2 (by Chris Huber)
102+
- Add PHPUnit config to readonly cache fixture ([#1942](https://github.com/Automattic/wp-codebox/pull/1942)) (by Chris Huber)
103+
- Allow managed PHPUnit discovery without config ([#1944](https://github.com/Automattic/wp-codebox/pull/1944)) (by Chris Huber)
104+
- Declare PHPUnit config in readonly fixture (by Chris Huber)
105+
- Serve cached Cloudflare pages before runtime boot (by Chris Huber)
106+
- Cache public pages by canonical revision (by Chris Huber)
107+
- Fail closed on PHPUnit discovery errors ([#1940](https://github.com/Automattic/wp-codebox/pull/1940)) (by Chris Huber)
108+
- Add canonical Cloudflare state restore (by Chris Huber)
109+
- Capture malformed PHPUnit bootstrap payloads ([#1933](https://github.com/Automattic/wp-codebox/pull/1933)) (by Chris Huber)
110+
- Harden Playground cache retention safety ([#1930](https://github.com/Automattic/wp-codebox/pull/1930)) (by Chris Huber)
111+
- Retain non-fatal PHPUnit bootstrap exits ([#1932](https://github.com/Automattic/wp-codebox/pull/1932)) (by Chris Huber)
112+
- Align Playground runtime bootstrap dependencies ([#1931](https://github.com/Automattic/wp-codebox/pull/1931)) (by Chris Huber)
113+
- Repair Cloudflare WordPress corpus dev rig (by Chris Huber)
114+
- Execute bounded plans through one recipe runtime ([#1928](https://github.com/Automattic/wp-codebox/pull/1928)) (by Chris Huber)
115+
- Run bounded PHPUnit plans in one disposable runtime ([#1922](https://github.com/Automattic/wp-codebox/pull/1922)) (by Chris Huber)
116+
- Preserve binary staged file bytes ([#1921](https://github.com/Automattic/wp-codebox/pull/1921)) (by Chris Huber)
117+
- Retain PHPUnit bootstrap failure diagnostics ([#1918](https://github.com/Automattic/wp-codebox/pull/1918)) (by Chris Huber)
118+
- Preserve Playground PHPUnit crash diagnostics ([#1917](https://github.com/Automattic/wp-codebox/pull/1917)) (by Chris Huber)
119+
- Add canonical Cloudflare runtime homepage (by Chris Huber)
120+
- Restore hook snapshot iteration (by Chris Huber)
121+
- Preserve generic hook removal behavior (by Chris Huber)
122+
- Remove Cloudflare investigation diagnostics (by Chris Huber)
123+
- Revert "Add bounded MDI init diagnostics" (by Chris Huber)
124+
- Revert "Probe complete canonical WordPress state" (by Chris Huber)
125+
- Revert "Probe canonical lifecycle boundaries" (by Chris Huber)
126+
- Revert "Probe MDI auto-draft persistence" (by Chris Huber)
127+
- Revert "Log canonical bootstrap stages" (by Chris Huber)
128+
- Revert "Persist canonical bootstrap stage evidence" (by Chris Huber)
129+
- Add coordinated multi-actor browser scenarios ([#1913](https://github.com/Automattic/wp-codebox/pull/1913)) (by Chris Huber)
130+
- Revert "Persist mutation stage evidence" (by Chris Huber)
131+
- Pin bounded MDI option persistence (by Chris Huber)
132+
- Probe shared MDI temp paths (by Chris Huber)
133+
- Isolate MDI option mutation tracking (by Chris Huber)
134+
- Isolate MDI dirty option writes (by Chris Huber)
135+
- Isolate MDI options fetch (by Chris Huber)
136+
- Isolate MDI options index maintenance (by Chris Huber)
137+
- Isolate MDI table flush probes (by Chris Huber)
138+
- Report MDI dirty flush inventory (by Chris Huber)
139+
- Split MDI write lifecycle probes (by Chris Huber)
140+
- Support external MariaDB PHPUnit runtimes ([#1912](https://github.com/Automattic/wp-codebox/pull/1912)) (by Chris Huber)
141+
- Allow mounts to skip artifact capture ([#1910](https://github.com/Automattic/wp-codebox/pull/1910)) (by Chris Huber)
142+
- Add MDI persistence isolation probes (by Chris Huber)
143+
- Recycle PHP at canonical request boundaries (by Chris Huber)
144+
- Instrument editor footer scripts (by Chris Huber)
145+
- Instrument block editor output phases (by Chris Huber)
146+
- Split canonical bootstrap setup phases (by Chris Huber)
147+
- Seed custom CSS lookup cache canonically (by Chris Huber)
148+
- Seed WordPress custom CSS absence cache (by Chris Huber)
149+
- Anchor custom CSS fast path uniquely (by Chris Huber)
150+
- Fast-path custom CSS theme JSON output (by Chris Huber)
151+
- Compare editor custom and theme styles (by Chris Huber)
152+
- Split global stylesheet memory phases (by Chris Huber)
153+
- Instrument core editor settings phases (by Chris Huber)
154+
- Instrument block editor settings memory (by Chris Huber)
155+
- Probe block editor global styles lookup (by Chris Huber)
156+
- Instrument block editor REST preload memory (by Chris Huber)
157+
- Split editor post-insert memory phases (by Chris Huber)
158+
- Tighten editor insertion memory marker (by Chris Huber)
159+
- Instrument Cloudflare editor memory phases (by Chris Huber)
160+
- Package constrained MDI runtime dependencies (by Chris Huber)
161+
- Bundle upstream auto-draft persistence fix (by Chris Huber)
162+
- Add bounded Cloudflare editor probes (by Chris Huber)
163+
- Honor coordinator lease retry timing (by Chris Huber)
164+
- Prevent stale runner publication branches ([#1895](https://github.com/Automattic/wp-codebox/pull/1895)) (by Chris Huber)
165+
- Separate workflow helpers from release assets ([#1892](https://github.com/Automattic/wp-codebox/pull/1892)) (by Chris Huber)
166+
- Preserve verification failure evidence ([#1890](https://github.com/Automattic/wp-codebox/pull/1890)) (by Chris Huber)
167+
- Document canonical lifecycle probes (by Chris Huber)
168+
- Add declared verification command artifacts ([#1888](https://github.com/Automattic/wp-codebox/pull/1888)) (by Chris Huber)
169+
- Persist canonical MDI change sets (by Chris Huber)
170+
- Add authenticated canonical state reset (by Chris Huber)
171+
- Parallelize canonical R2 persistence (by Chris Huber)
172+
- Keep rewrite cache out of canonical state (by Chris Huber)
173+
- Probe rewrite rule persistence (by Chris Huber)
174+
- Add direct wp-loaded probe aliases (by Chris Huber)
175+
- Add short canonical lifecycle probes (by Chris Huber)
176+
- Bisect canonical wp-loaded callbacks (by Chris Huber)
177+
- Disable browser-request cron scheduling (by Chris Huber)
178+
- Patch disabled cron before canonical init (by Chris Huber)
179+
- Remove disabled cron at init time (by Chris Huber)
180+
- Skip disabled cron registration in Cloudflare (by Chris Huber)
181+
- Isolate canonical cron scheduling (by Chris Huber)
182+
- Remove diagnostic hooks through WordPress APIs (by Chris Huber)
183+
- Probe remaining widget registrations (by Chris Huber)
184+
- Compare MDI widget option visibility (by Chris Huber)
185+
- Bisect MDI widget settings registration (by Chris Huber)
186+
- Split widget initialization diagnostics (by Chris Huber)
187+
- Extract the runtime corpus inside PHP (by Chris Huber)
188+
- Buffer the bounded R2 runtime artifact (by Chris Huber)
189+
- Provision the WordPress runtime corpus in R2 (by Chris Huber)
190+
- Stream WordPress browser assets outside PHP (by Chris Huber)
191+
- Bound the Cloudflare WordPress runtime (by Chris Huber)
192+
- Keep PHP outside the state coordinator (by Chris Huber)
193+
- Prebuild canonical Cloudflare WordPress state (by Chris Huber)
194+
- Persist functional WordPress state in Cloudflare (by Chris Huber)
195+
196+
### Fixed
197+
- Fix staged binary assets in browser previews ([#1939](https://github.com/Automattic/wp-codebox/pull/1939)) (by Chris Huber)
198+
- Fix Cloudflare site styles and warm reads (by Chris Huber)
199+
- Fix Playground cache leases on macOS ([#1936](https://github.com/Automattic/wp-codebox/pull/1936)) (by Chris Huber)
200+
- bound Playground custom archive cache ([#1929](https://github.com/Automattic/wp-codebox/pull/1929)) (by Chris Huber)
201+
- support private PHPUnit TestSuite constructors ([#1927](https://github.com/Automattic/wp-codebox/pull/1927)) (by Chris Huber)
202+
- expose CLI streams in Playground PHP runtimes ([#1905](https://github.com/Automattic/wp-codebox/pull/1905)) (by Chris Huber)
203+
- decode complete visual compare images ([#1907](https://github.com/Automattic/wp-codebox/pull/1907)) (by Chris Huber)
204+
- wait for readonly mount staging before cleanup ([#1897](https://github.com/Automattic/wp-codebox/pull/1897)) (by Chris Huber)
205+
- provision multisite PHPUnit runtimes ([#1900](https://github.com/Automattic/wp-codebox/pull/1900)) (by Chris Huber)
206+
5207
## [0.12.29] - 2026-07-18
6208

7209
### Changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# WP Codebox
22

3+
Adversarial campaign, transport fault, service disruption, browser oracle, and
4+
sealed replay contracts are documented in
5+
[`docs/adversarial-runtime.md`](docs/adversarial-runtime.md).
6+
37
**WP Codebox unlocks secure WordPress code execution from anywhere.** Run agents, accept untrusted patches, evaluate plugins, reproduce bugs, or experiment freely - every sandbox is a disposable contained WordPress runtime that can't touch its caller. Your host can be a CLI, CI job, mobile app, Node service, WordPress plugin, or anything else that can shell out or hit an API.
48

59
WordPress has historically lacked a clean scratch space for code execution. Modern dev workflows assume one - Node has `npm install` per project, Python has venvs, containers have ephemeral filesystems. WP Codebox provides that primitive as a usable runtime contract: real WordPress, fully ephemeral, no host filesystem access except via declared mounts. Any product - WordPress or not - can offer code execution against a real WordPress instance without risking the caller.
@@ -721,7 +725,7 @@ Supported runtime commands today:
721725
- `wordpress.server-page-load`: load `surface=admin|frontend` plus `path=<path>` or `url=<path-or-url>` through the live preview HTTP server without a browser. Its performance observation is marked `source=server-http` and `kind=server-page-load`.
722726
- `wordpress.browser-page-load`: load `surface=admin|frontend` plus `path=<path>` or `url=<path-or-url>` in Playwright by wrapping `wordpress.browser-probe`.
723727
- `wordpress.browser-probe`: boot the live preview, visit `url=<path-or-url>` with Playwright, and capture generic browser replay/audit evidence under `files/browser/`.
724-
- `wordpress.browser-actions`: boot the live preview, drive it with an ordered interaction script (`steps-json`), assert browser behavior, and capture replay/audit evidence under `files/browser/`.
728+
- `wordpress.browser-actions`: boot the live preview, drive it with an ordered interaction script (`steps-json`) or bounded adaptive exploration, optionally classify accessibility/keyboard/focus failures, and capture replay/audit evidence under `files/browser/`.
725729

726730
`wordpress.run-php` loads `/wordpress/wp-load.php` by default. Use `--arg bootstrap=none` for raw PHP.
727731

@@ -1305,7 +1309,7 @@ Callers can gate success on post-agent verification through `verify_steps`: an a
13051309

13061310
Each component contract declares `slug`, `path` or `source`, optional explicit `pluginFile`, optional `activate`, optional `loadAs`, and optional `readiness_probe` metadata.
13071311

1308-
The CLI binary can come from ability input, the `wp_codebox_bin` option, or the `wp_codebox_bin` filter. Source-checkout snapshots that do not include generated `dist/` files should point at `bin/wp-codebox-source.mjs`; it builds WP Codebox when needed before delegating to the compiled CLI.
1312+
The CLI binary can come from ability input, the `wp_codebox_bin` option, or the `wp_codebox_bin` filter. Source-checkout snapshots should point at `bin/wp-codebox-source.mjs`; it runs the incremental source build before every invocation so ignored `dist/` output cannot predate the checked-out core, Playground, or CLI source, then delegates to the compiled CLI.
13091313

13101314
Caller-owned runtime components can provide workspace, file, GitHub, or other tools to the sandboxed agent. WP Codebox owns the parent-site ability surface, sandbox lifecycle, and artifact capture boundary.
13111315

bin/wp-codebox-source.mjs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,21 @@ function run(command, args, options = {}) {
3535
}
3636

3737
if (result.status !== 0) {
38+
if (options.failureContext) {
39+
console.error(`WP Codebox source entrypoint failed to ${options.failureContext} (exit ${result.status ?? 1}).`)
40+
}
3841
process.exit(result.status ?? 1)
3942
}
4043
}
4144

42-
if (!existsSync(distEntrypoint)) {
45+
const distIsAbsent = !existsSync(distEntrypoint)
46+
if (distIsAbsent) {
4347
console.error("WP Codebox CLI dist entrypoint is absent; bootstrapping the source checkout before running the CLI.")
48+
}
4449

45-
if (!existsSync(nodeModules)) {
46-
run("npm", [existsSync(packageLock) ? "ci" : "install"])
47-
}
48-
49-
run("npm", ["run", "build"])
50+
if (!existsSync(nodeModules)) {
51+
run("npm", [existsSync(packageLock) ? "ci" : "install"], { failureContext: "install source checkout dependencies" })
5052
}
5153

54+
run("npm", ["run", "build"], { failureContext: "build the source checkout" })
5255
run(process.execPath, [distEntrypoint, ...process.argv.slice(2)], { cwd: callerCwd, delegate: true })

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ unless this index says otherwise.
4141
- [Generic runtime primitives](./generic-runtime-primitives.md) documents the
4242
caller-neutral artifact storage, trusted browser origin, materialization, and
4343
target-context envelopes shared by runtime integrations.
44+
- [Browser environment matrices](./browser-environment-matrices.md) documents
45+
deterministic hostile-environment expansion, capability fidelity, bounds,
46+
isolated cell artifacts, and replay evidence.
4447
- [Runtime profile contract](./runtime-profile-contract.md) documents
4548
`wp-codebox/runtime-profile/v1`, the Codebox-owned profile request/result lane
4649
for capabilities, components, readiness, diagnostics, and provenance.

0 commit comments

Comments
 (0)