ROADMAP

Compatibility proved. Resident delivery under test. Async later.

The sequence follows technical gates, not arbitrary dates. Each phase must preserve oracle behavior and unlock a measurable use case.

DONE

Full WordPress suites at effective oracle parity.

The single-site suite runs 30,472 tests and multisite 31,278. Each has one declared name-diff, caused by an intentionally honest wrapper list.

real MySQLwp-adminRESTmedia byte parity

DONE

Measured CPU, footprint and request teardown.

The performance arc reduced full-suite CPU from roughly 4.1× to a current 2.06–2.11× reference band. WP-72 closed the measured per-request residual to 0.0010 KiB/request and unblocked the Axum route.

NOW

Axum plus a dedicated-thread worker-actor pool.

Because a VM contains Rc-based state and is !Send, each long-lived worker is pinned to its own OS thread. Axum dispatches requests through mpsc message passing; the explicit request lifecycle is wired, while a bounded queue and backpressure remain shipping gates.

NEXT GATE

Move from a persistent arena to safe same-VM reuse.

The thread-persistent RetainSet and its two-request opening gate have landed. Next come a truly reused VM, K=10 amplification, a fresh-vs-reuse oracle pair and lifecycle-order checks before any persistent-VM claim.

AFTER THE BOUNDARY

Load evidence, Laravel and remaining PHP surfaces.

Once the reuse boundary is byte-faithful and memory-bounded, the project can measure queueing and throughput honestly, continue hardening, validate Laravel and close high-value extension gaps.

LONG-TERM VISION

Single-binary delivery and native async I/O.

The VM remains synchronous. A per-thread driver can later suspend and resume Fibers around real non-blocking I/O, after the resident lifecycle and relevant network/database drivers are proven.

ARCHITECTURAL NOTE

The worker owns the VM; the async runtime does not move it.

The rejected task_local route could not provide genuine reuse for a non-Send VM. The design converges on php-fpm-style worker actors: dedicated OS threads, mpsc dispatch, one owner, and a Zend-ordered request_start → run → request_shutdown → request_end boundary. The implementation must still move from its unbounded channel to explicit backpressure before shipping.

What decides whether a phase ships

Behavioral parity

Fresh and reused request paths must produce the same named outcomes as PHP.

Bounded memory

Request state must reset without residual growth under amplification and sustained workloads.

Measured performance

Claims require paired oracle runs, user CPU and footprint ladders—not isolated wall-clock anecdotes.

Failure semantics

Exceptions, shutdown handlers, buffers, destructors and sessions must execute in the correct order.

Backpressure

A bounded worker queue must fail predictably rather than creating unbounded tasks or threads.

Triggers, not calendars

Pools, preload and async ship only when a real workload proves both the need and the implementation.

Current route: NEXT_SESSION_WORDPRESS.md ↗ · performance evidence: GAP_TREND.md ↗ · async and distribution architecture ↗