Skip to content

πŸ—ΊοΈ ROADMAP: Self-host + web-capable PHP subset (living)Β #78

Description

@PurHur

Living ROADMAP (high-signal, phased)

Merge gates are local/Docker only β€” no GitHub Actions (#394 βœ…).
Harness-safe: make test-harness, ./script/docker-ci-local.sh, ./script/docker-exec.sh.

North star: #1492 (M3β†’M5 self-host)

Development focus (Jun 2026): optimize for fast M5 feedback β€” not north-star5-verify --strict on every PR (~1h). Daily gates: make north-star5-verify-fast (~1–2 min), make bootstrap-selfhost-vm-driver-execute-probe (~20ms). Reserve --strict for pre-merge bootstrap/gen-0/vendor-prelink PRs. Doc: docs/bootstrap-m5-fast-path.md Β· Cursor rule: .cursor/rules/m5-fast-development.mdc.


User release roadmap (next: v1.1.0)

Meta: #8739 (reopen on tag day) Β· Latest tag: v1.0.0 (2026-05-29)

Field Value
Target version v1.1.0
Target window Jul 2026 (after --full readiness green)
Theme M5 fast-path stability for users; stdlib/JIT parity batch since v1.0.0 (enum, property hooks, preg_match JIT, spl_autoload, php-in-php helpers, nested JIT compile isolation, docs sync)

Must-ship checklist

Gate checklist

Out of scope (v1.1.0)

  • Bootstrap honesty tag / v2 self-host release
  • north-star5-verify --strict (~1h)
  • Full Zend parity, MCJIT execute (#98)

Bootstrap release roadmap (future v2 / self-host honesty)

Not a tag candidate until north-star5-verify --strict is green on demand. Track progress only.

Blocker / gap Gate Status Tracker
Honest spine PHP main() runtime full-spine smoke without native shortcut 🚧 partial #8559
Compile-spine stub retirement shrink PHP_COMPILER_SELFHOST_AOT on compile spine 🚧 in progress #1402
M3 JIT unit strict inventory compile_driver 🚧 partial #3038
Bootstrap include_path spine include resolution open #3223
php-cfg asymmetric visibility overlay apply-patches.sh anchor πŸ”΄ regression #9729
Strict M5 presenter north-star5-verify.sh --strict (~1h) βœ… green (pre-merge only) #1492

Must-ship before bootstrap tag: spine N/N honest runtime, stub retirement on compile path, no Zend in cold-boot loop β€” see #1492.


Milestone status (Jun 2026 β€” maintainer probe 2026-06-22)

Milestone Gate Status Tracker
M0 minimal link make bootstrap-selfhost-link βœ… GREEN #2894
M2 spine / inventory bootstrap-inventory.php --check πŸ”΄ stale doc #10368 (reopened)
M2 spine coverage check-selfhost-spine-coverage-sync.php πŸ”΄ 1 missing #10542 (NestedJitCompileScope.php)
M2 VM driver execute make bootstrap-selfhost-vm-driver-execute-probe βœ… GREEN #2201
M3 HelloWorld strict make bootstrap-selfhost-helloworld βœ… GREEN (emit_path=native) β€”
M3 JIT unit strict inventory compile_driver 🚧 partial #3038
M4 full-revision make bootstrap-selfhost-full-revision-probe βœ… GREEN #2880
M4 full ladder make bootstrap-loop-probe βœ… GREEN #1498
M5 vendor (committed) prelinked/bootstrap-vendor/*.o manifest βœ… GREEN 3/3 object_ok
M5 spine w/o vendor/ north-star5 step 4c βœ… GREEN #3052 closed
M5 gen-0 no Zend BOOTSTRAP_M5_NO_ZEND=1 empty build/ βœ… GREEN #3053 closed
M5 vendor native rebuild rm prelinked/*.o, no Zend fallback βœ… GREEN #3054 closed
M5 presenter (daily) make north-star5-verify-fast πŸ”΄ RED #10542
M5 presenter (pre-merge) north-star5-verify.sh --strict βœ… GREEN ~1h β€” bootstrap PRs only
M5 honest runtime full-spine PHP main() at runtime 🚧 partial #8559
Spine coverage sync check-selfhost-spine-coverage-sync.php 🟑 committed doc OK; live regen finds gap #10542

Daily verify (fast β€” use during development):

make bootstrap-selfhost-vm-driver-execute-probe   # ~20ms
make north-star5-verify-fast                      # ~1–2 min
./script/ci-fast.sh                               # NORTH_STAR5_VERIFY_FAST_GATE=1 default

Pre-merge bootstrap verify (strict β€” sparingly):

./script/docker-exec.sh -- bash -lc './script/north-star5-verify.sh --strict'

Next 5 worker priorities (parallel-safe)

  1. Inventory doc regen β€” #10368 (release-blocker β€” quick gate red; regen + commit)
  2. Spine: NestedJitCompileScope β€” #10542 (release-blocker β€” north-star5-fast red after Fix AOT smoke: nested JIT helper compile isolation (#10343)Β #10498)
  3. Compile-spine stub retirement β€” #1402 / docs/bootstrap-m5-fast-path.md
  4. Honest spine PHP main() runtime β€” #8559
  5. Full bundle inventory flake β€” #10531 (secondary β€” after P0 green)

Parity backlog themes (Jun 2026)

Theme Examples
Language (PHP 8.3–8.4) property hooks (#6424–#6427), enum case invoke #9846, lazy proxy #7387
Stdlib gaps is_callable #3132, createLazyProxy #7387, ext/zip #3337
php-in-php / shrink C #7389 linker audit, superglobals_refresh.c #5330, phpc_stream.c #5343
php-src-strict enum operands #5906 / #5907 / #7390, hash #5780

Repro (roadmap health check)

docker info >/dev/null
./script/docker-exec.sh -- bash -lc 'php script/bootstrap-inventory.php --check'
./script/docker-exec.sh -- bash -lc 'make bootstrap-selfhost-vm-driver-execute-probe'
./script/docker-exec.sh -- bash -lc 'make north-star5-verify-fast'
./script/docker-exec.sh -- bash -lc 'make bootstrap-loop-probe'

Done when (living doc)

Verification (local / Docker only)

./script/docker-exec.sh -- bash -lc 'make north-star5-verify-fast'
./script/docker-exec.sh -- bash -lc 'php script/bootstrap-inventory.php --check'
./script/docker-exec.sh -- bash -lc 'make bootstrap-loop-probe'

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:toolingTooling / CI / docsenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when β€” safe for workers to claimphase-0:FoundationPhase 0 – foundation & DevEx

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions