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 (Jul 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) Β· Pre-release: v1.1.0-dev.1 (2026-07-04)
Field
Value
Target version
v1.1.0
Target window
Aug 2026 (blocked on #29001 examples AOT; --full otherwise green)
Theme
M5 fast-path stability for users; stdlib/JIT parity batch since v1.0.0 (enum, property hooks, DOM ext, preg_match JIT, spl_autoload, php-in-php helpers, stream/getenv JIT, docs sync)
Must-ship checklist
#8737 β ship release-readiness.sh user-release gate presenter
#8738 β fix php-types-never-type.patch on fresh vendor/ install
#9066 β fix check-selfhost-spine-coverage-sync gate β
(regressed β Release v1.1.0: fix spine-coverage regression β GeneratorYieldSourceMarker.php missing from spineΒ #10367 β closed)
#9931 β fix php-cfg-new-first-class-callable.patch β
(2026-06-20)
#10367 β spine: add GeneratorYieldSourceMarker.php β
(2026-06-20)
#10368 β regenerate stale docs/bootstrap-inventory.md β
(2026-06-22)
#10542 β spine: add NestedJitCompileScope.php β
(2026-06-22)
#11205 β regenerate docs/capabilities.md β
(2026-06-24)
#11206 β fix examples 000β009 AOT smoke β
(2026-06-24; regressed β Release v1.1.0: fix examples 000β009 AOT smoke regression (001-SimpleWeb munmap_chunk)Β #12039 )
#11565 β spine: add IniIntrospectionRuntime.php β
(2026-06-25)
#12039 β fix examples 000β009 AOT smoke β
(2026-06-26)
#12040 β fix examples web smoke β
(2026-06-26)
#12564 β spine: sync array_intersect_key/diff_key/diff_assoc JIT runtimes β
(2026-06-27)
#13101 β vm-driver-probe after north-star5-fast β
(2026-06-29, PR Fix vm-driver-probe fallback when prelinked gen-0 seed fails (#13101)Β #13110 )
#13571 β fix examples 000β009 AOT smoke (exit 139 on 000-HelloWorld; regressed from Release v1.1.0: fix examples 000β009 AOT smoke regression (001-SimpleWeb munmap_chunk)Β #12039 ) β
(closed 2026-06-29)
#13995 β fix examples 000β009 AOT smoke (001-SimpleWeb exit 134 munmap_chunk(): invalid pointer) β
(closed; CallArgv/nested-JIT fixes Bootstrap: CallArgv LLVM global leaks across JIT Context β bootstrap-aot-link segfault (#197)Β #14459 βDefer nested-JIT standalone init for bootstrap AOT compile (#14472)Β #14480 )
#14484 β spine: add ext/dom/NodeHasAttributes.php β
(2026-07-01)
#15415 β fix corrupt php-cfg-loop-resolver-continue-switch-warning.patch hunk β
(2026-07-03)
#15416 β regenerate docs/capabilities.md β
(2026-07-03)
#15417 β fix examples 000β009 AOT smoke exit 139 on 000-HelloWorld β
(2026-07-03)
#15973 β spine: add lib/JIT/Builtin/WeakRefNativeOpsJit.php β
(2026-07-04, PR Bootstrap: sync WeakRefNativeOpsJit spine entries (#15973)Β #15983 )
#16374 β spine: add ext/standard/JitStreamSupportsFeatureArg.php β
(2026-07-05, PR Bootstrap: spine sync JitStreamSupportsFeatureArg.php (#16374)Β #16381 )
#16909 β spine: add lib/VM/Builtin/ReflectionEnumFromName.php β
(2026-07-07, Stdlib: ReflectionEnum::fromName() static factory missing (PHP 8.2+, ext/reflection/php_reflection.c)Β #16877 regression)
#9225 β examples 000β009 AOT smoke β
(regressed β Release v1.1.0: fix examples 000β009 AOT smoke regression (LLVM Module.php)Β #11206 β Release v1.1.0: fix examples 000β009 AOT smoke regression (001-SimpleWeb munmap_chunk)Β #12039 )
#9226 β examples web smoke β
(regressed β Release v1.1.0: fix examples web smoke regression (001-SimpleWeb serve readiness)Β #12040 )
#10369 β docs/capabilities sync β
(regressed β Release v1.1.0: regenerate docs/capabilities.md (capability-matrix --check drift)Β #11205 β closed)
#17157 β regenerate docs/capabilities.md β
(2026-07-08)
#17158 β fix examples 007-ThrowsWeb web smoke POST invalid β
(2026-07-08)
#17405 β spine: clamp/date wrappers + MathClamp β
(2026-07-08)
#17521 β spine: ReflectionFunctionIsGenerator + ReflectionMethodIsGenerator β
(2026-07-09, PR Bootstrap: spine sync ReflectionFunction/Method::isGenerator (#17521)Β #17536 )
#17522 β fix examples 009-FastCGIWeb AOT smoke PATH_INFO exit 134 β
(2026-07-09)
#17627 β spine: ext/dom/FragmentConstruct.php β
(2026-07-10, PR Bootstrap: spine sync ext/dom/FragmentConstruct.php (#17627)Β #17636 )
#18195 β spine: ldap_escape helpers (LdapRuntime, JitLdapEscape, LdapEscapeJitHelper) β
(2026-07-12, PR Bootstrap: spine sync ldap_escape helpers (#18195)Β #18208 /Self-host: sync spine for ldap_escape + xml SAX PHP-in-PHP units (#18195)Β #18213 )
#18550 β spine: sync 12 inventory files (wddx + nested JIT + multipart) β
(2026-07-13, PR spine sync batch)
#18831 β regenerate docs/capabilities.md β
(2026-07-14, PR Release: regenerate docs/capabilities.md (capability-matrix drift)Β #18836 ; verified green 2026-07-15)
#18832 β fix examples 001-SimpleWeb AOT smoke (QUERY_STRING=name=Smoke ignored) β
(2026-07-15, PR AOT: restore user-script htmlspecialchars stub β fix 001-SimpleWeb QUERY_STRING (closes #18832)Β #19142 /AOT: restore ObOutputExecCaptureLlvm defer β fix user-script segfault (#18832 follow-up)Β #19144 )
#19504 β fix examples 003-MiniWebApp AOT smoke (exit 134 free(): invalid pointer) β
(closed 2026-07-16; regressed β Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 munmap_chunk) (re-#19504)Β #20507 )
#19978 β spine: sync isAnonymousClass() inventory (5 files; Add isAnonymousClass() for PHP 8.4 forward profile (#19969)Β #19970 fallout) β
(closed 2026-07-17)
#19979 β fix examples 006-FileUploadWeb AOT smoke (multipart upload needle) β
(closed 2026-07-17)
#19980 β regenerate docs/capabilities.md (capability-matrix gate) β
(closed 2026-07-17; 1217 builtins)
#20507 β fix examples 003-MiniWebApp AOT smoke (exit 134 munmap_chunk(): invalid pointer; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 free(): invalid pointer)Β #19504 ) β
(closed 2026-07-18, PR AOT: drop dead thankyou nest from MiniWebApp layout (#20507)Β #20552 )
#20752 β spine: Locale canonicalize/parse/compose after Stdlib: Locale canonicalize/parseLocale/composeLocale/getKeywords (#20738)Β #20750 β
(closed 2026-07-19)
#20923 β fix examples 009-FastCGIWeb AOT smoke (missing PATH_INFO diagnostic; re-Release v1.1.0: fix examples 009-FastCGIWeb AOT smoke (PATH_INFO exit 134 realloc)Β #17522 ; release-blocker ; filed 2026-07-19) β
(closed 2026-07-19)
#21403 β regenerate docs/capabilities.md + docs/bootstrap-inventory.md (re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate)Β #19980 ; release-blocker ; filed 2026-07-20)
#22138 β spine: ReflectionClassIsCloneable.php (Stdlib: ReflectionClass::isCloneable() missing β __clone visibility (ext/reflection/php_reflection.c)Β #22109 ; release-blocker ; filed 2026-07-22) β
(closed 2026-07-22)
#22139 β fix bootstrap-selfhost-link LLVM verify on compiler_minimal (gen-0 Foundation: compiled-driver reuse has no lowering-source freshness guard β Tier-1 workflow can silently test stale codegen (script/bootstrap-resolve-compile-invoke.sh)Β #21855 drift; release-blocker ; filed 2026-07-22) β
(closed 2026-07-22)
#22638 β fix phpc build module verification (4 lowering defects; 266/266 helper units degraded) β
(closed 2026-07-23, PR Fix AOT module verification: four JIT lowering defects (#22638)Β #22643 )
#22845 β fix examples 003-MiniWebApp AOT smoke (empty $appName / missing MiniWebApp needle; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 munmap_chunk) (re-#19504)Β #20507 ) β
(closed 2026-07-24, PR AOT: MiniWebApp htmlspecialchars + include $appName (#22845)Β #22871 )
#23426 β regenerate docs/capabilities.md (capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md + docs/bootstrap-inventory.md (re-#19980)Β #21403 ; release-blocker ; filed 2026-07-26) β
(closed 2026-07-26, PR Release: regenerate docs/capabilities.md for capability-matrix gate (#23426)Β #23570 ; regressed β Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23426)Β #23847 )
#23427 β fix examples 005-SessionsWeb AOT smoke (POST flash exit 134 free(): invalid pointer; release-blocker ; filed 2026-07-26) β
(closed 2026-07-26, PR AOT: fix SessionsWeb 005 POST flash free(): invalid pointer (#23427)Β #23549 ; regressed β Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (Static call class must be a literal; re-#23427)Β #23848 link-time static call)
#23847 β regenerate docs/capabilities.md (capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#21403)Β #23426 ; release-blocker ; filed 2026-07-27) β
(closed 2026-07-27, PR Docs: resync capabilities.md for capability-matrix gate (#23847)Β #23865 ; regressed β Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23847)Β #24229 )
#23848 β fix examples 005-SessionsWeb AOT smoke (Static call class must be a literal; re-Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (POST flash exit 134 free(): invalid pointer)Β #23427 ; release-blocker ; filed 2026-07-27) β
(closed 2026-07-27)
#24229 β regenerate docs/capabilities.md (capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23426)Β #23847 ; release-blocker ; filed 2026-07-28) β
(closed 2026-07-28)
#24738 β refresh helper-runtime-prelink 34 stale units (re-Trust: helper-runtime prelink stale β 19 DOM units (release-readiness Pillar 1)Β #24558 ; release-blocker ; filed 2026-07-29) β
(closed 2026-07-29)
#25333 β spine + helper-runtime after Regression: ftell() returns 0 after failed fseek on php://memory β Zend false (ext/standard/streams.c)Β #25299 (JitMemoryStreamHelper; re-fix(stdlib): ftell() false after failed fseek on php://memory (#25299)Β #25329 ; release-blocker ) β
(closed 2026-07-30, PR fix(trust): restore Pillar 1 after #25299 helper/spine falloutΒ #25334 )
#25352 β refresh helper-runtime-prelink 8 stale class-introspection JIT helpers (re-Regression: north-star5-fast / release-readiness red β JitMemoryStreamHelper missing from spine + 2 stale helper-runtime units (re-#25329)Β #25333 ; release-blocker ; filed 2026-07-30 afternoon) β
(closed 2026-07-30)
#25344 β regenerate docs/capabilities.md (capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23847)Β #24229 ; release-blocker ; filed 2026-07-30) β
(closed 2026-07-30)
#25345 β fix examples 003-MiniWebApp AOT smoke (empty $appName / missing MiniWebApp needle; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (empty $appName β missing MiniWebApp needle) (re-#20507)Β #22845 ; release-blocker ; filed 2026-07-30) β
(closed 2026-07-30)
#25899 β spine: DomCompareDocumentPosition + refresh helper-runtime 27 stale (dom + class-introspection; re-Trust: ExceptionClone missing from self-host spine β north-star5-fast red (re-#25879)Β #25887 /Trust: refresh helper-runtime prelink (1 stale InfoJitHelper) β release-readiness user_release_ready=no (re-#24302)Β #25892 ; release-blocker ; filed 2026-07-31) β
(closed 2026-07-31, PR Trust: DomCompareDocumentPosition spine + refresh 27 stale helper-runtime (#25899)Β #25906 )
#26309 β helper-runtime prelink core_fingerprint stale (346 units; re-Foundation: helper-runtime prelink stale again (116 units) β release-readiness helper-runtime-prelink red (re-#26232)Β #26296 ; release-blocker ) β
(closed 2026-08-01)
#26392 β helper-runtime + inventory stale after nullsafe/property_exists (re-Foundation: helper-runtime prelink stale again (116 units) β release-readiness helper-runtime-prelink red (re-#26232)Β #26296 ) β
(closed 2026-08-01, PR Foundation: refresh helper-runtime + inventory after nullsafe/property_exists (#26392)Β #26393 )
#26410 β regenerate docs/capabilities.md (capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#24229)Β #25344 ; release-blocker ; filed 2026-08-01) β
(closed 2026-08-01)
#26411 β fix examples 005-SessionsWeb AOT smoke (GET flash missing; PHPSESSID=/index.php; re-Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (Static call class must be a literal; re-#23427)Β #23848 ; release-blocker ; filed 2026-08-01) β
(closed 2026-08-01)
#26921 β helper-runtime core_fingerprint mismatch / corpus refresh (re-Release blocker: helper-runtime prelink STALE after MathBaseConvertJitHelper (#26903)Β #26914 /Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302 ; release-blocker ; filed 2026-08-02) β
(closed 2026-08-02, PR Trust: refresh helper-runtime prelink after core_fingerprint drift (#26921)Β #26932 ; regressed β Foundation: helper-runtime 12 STALE units β release-readiness red (re-#26921/#24302)Β #27239 )
#27239 β helper-runtime 12 STALE units (re-Foundation: helper-runtime core_fingerprint mismatch β release-readiness red (re-#26914/#24302)Β #26921 /Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302 ; release-blocker ; filed 2026-08-03) β
(closed 2026-08-03; helper-runtime green 2026-08-05)
#27240 β north-star5-fast 4f-m gen-0 manifest/driver mismatch after Trust: refresh gen-0 argv fingerprint after #27221/#27225 (Pillar 1) (#27224)Β #27230 (re-Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713 ; release-blocker ; filed 2026-08-03) β
(closed 2026-08-03; regressed β Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27693 (re-#27240/#8713)Β #27696 )
#27696 β north-star5-fast 4f-m gen-0 manifest/driver mismatch after Trust: refresh helper-runtime prelink + honest gen-0 argv (#10533)Β #27693 (re-Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27230 (re-#8713)Β #27240 /Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713 ; release-blocker ; filed 2026-08-05) β
(closed 2026-08-05 via Trust: honest gen-0 argv refresh after #27697/#27698 lowering drift (#27696)Β #27701 ; regressed β Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27710 (re-#27696/#8713)Β #27714 )
#27714 β north-star5-fast 4f-m gen-0 mismatch after Language: Zend fatal for anonymous class in attribute ctor (#27709)Β #27710 (re-Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27693 (re-#27240/#8713)Β #27696 /Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713 ; release-blocker ) β
(closed 2026-08-05 via Trust: honest gen-0 argv refresh after #27710β#27723 lowering drift (#27714)Β #27729 @ c9c463922)
#27732 β helper-runtime core_fingerprint mismatch / cold-build timeout (re-Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302 /Foundation: helper-runtime core_fingerprint mismatch β release-readiness red (re-#26914/#24302)Β #26921 ; release-blocker ; filed 2026-08-05 afternoon) β
(closed 2026-08-05; regressed β Trust: refresh helper-runtime prelink β 3 STALE units after array_fill/getrusage/json_encode (re-#27732)Β #28127 unit-level STALE)
#28127 β helper-runtime 3 STALE units (ArrayFill/Getrusage/JsonEncodeNested JitHelpers; re-Trust: refresh helper-runtime prelink β core_fingerprint stale (re-#24302)Β #27732 /Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302 ; release-blocker ; filed 2026-08-06) β
(closed 2026-08-06; tip recovered mid-day 2026-08-07 β regressed β Trust: refresh helper-runtime prelink β 3 STALE units after round/RoundingMode (re-#28127)Β #28554 )
#28554 β helper-runtime 3 STALE units (Floor/Round/Sort JitHelpers after round/RoundingMode; re-Trust: refresh helper-runtime prelink β 3 STALE units after array_fill/getrusage/json_encode (re-#27732)Β #28127 /Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302 ; release-blocker ; filed 2026-08-07) β
(closed 2026-08-07; tip recovered β regressed β Trust: refresh GraphemeStrSplitJitHelper helper-runtime prelink after #28967 (re-#28963)Β #28968 GraphemeStrSplit β closed via Trust: refresh GraphemeStrSplitJitHelper helper-runtime prelink (#28968)Β #28975 )
#29001 β fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (QUERY_STRING name=Smoke not parsed)Β #18832 /Release v1.1.0: fix examples 000β009 AOT smoke (001-SimpleWeb exit 134 munmap_chunk invalid pointer)Β #13995 ; release-blocker ; filed 2026-08-08)
CHANGELOG draft (#9227 closed β stub on master; refresh before tag)
Pillar 1 (Trust) β #10533 (closed; status on #78 ): π’ quick user_release_ready: yes @ d0b2bc4585 (2026-08-08). Inventory OK 7248/7248 ; helper-runtime 369 fresh / 0 stale ; cold-build β
(~4s); spine / root-readme / north-star5-fast / vm-driver / gen0-functional β
. gen0_provenance stale (driver cc281e13c, 23 lowering commits, unverified-restamp β warning only). Pillar 2 (Ship): --full red on examples-aot-smoke β #29001 .
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 (Aug 2026 β release review 2026-08-08 )
Milestone
Gate
Status
Tracker
M0 minimal link
make bootstrap-selfhost-link
β
GREEN (partial honesty)
OK /compiler/build/selfhost via Zend gen-0 fallback; stale native driver (#21855 )
M2 spine / inventory
bootstrap-inventory.php --check
β
GREEN
release-readiness 7248/7248
M2 spine coverage
check-selfhost-spine-coverage-sync.php
β
GREEN
7248 + 2 deferred (#1960 /#1922 )
M2 VM driver execute
make bootstrap-selfhost-vm-driver-execute-probe
β
GREEN
via release-readiness quick
M3 HelloWorld strict
make bootstrap-selfhost-helloworld
β
GREEN
emit_path=native; stdout Hello World
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
β
GREEN
via release-readiness @ d0b2bc4585
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
User release --full
release-readiness.sh --full
π΄ RED
#29001 001-SimpleWeb exit 139; capability-matrix + web smoke green
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)
Examples AOT smoke (Pillar 2) β #29001 (release-blocker β 001-SimpleWeb exit 139 after c:main_after_init; no smoke-skip)
Re-probe --full β after Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-#18832)Β #29001 β confirm user_release_ready: yes (capability-matrix + web smoke already green 2026-08-08)
Gen-0 argv / provenance β honest refresh for 23 lowering commits since cc281e13c (do not restamp; unverified-restamp debt)
Keep helper-runtime green β tip churn often reintroduces STALE units after stdlib landings (Pillar 1 watch)
CHANGELOG expand β refresh v1.1.0 stub themes before tag (bootstrap honesty #1402 /#8559 not tag-blocking)
Parity backlog themes (Jul 2026)
Repro (roadmap health check)
docker info > /dev/null
./script/docker-exec.sh -- bash -lc ' ./script/release-readiness.sh --json'
./script/docker-exec.sh -- bash -lc ' ./script/release-readiness.sh --full --json'
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'
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 (Jul 2026): optimize for fast M5 feedback β not
north-star5-verify --stricton every PR (~1h). Daily gates:make north-star5-verify-fast(~1β2 min),make bootstrap-selfhost-vm-driver-execute-probe(~20ms). Reserve--strictfor 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) Β· Pre-release: v1.1.0-dev.1 (2026-07-04)
--fullotherwise green)Must-ship checklist
release-readiness.shuser-release gate presenterphp-types-never-type.patchon freshvendor/installcheck-selfhost-spine-coverage-syncgate β (regressed β Release v1.1.0: fix spine-coverage regression β GeneratorYieldSourceMarker.php missing from spineΒ #10367 β closed)php-cfg-new-first-class-callable.patchβ (2026-06-20)GeneratorYieldSourceMarker.phpβ (2026-06-20)docs/bootstrap-inventory.mdβ (2026-06-22)NestedJitCompileScope.phpβ (2026-06-22)docs/capabilities.mdβ (2026-06-24)IniIntrospectionRuntime.phpβ (2026-06-25)001-SimpleWebexit 134munmap_chunk(): invalid pointer) β (closed; CallArgv/nested-JIT fixes Bootstrap: CallArgv LLVM global leaks across JIT Context β bootstrap-aot-link segfault (#197)Β #14459βDefer nested-JIT standalone init for bootstrap AOT compile (#14472)Β #14480)ext/dom/NodeHasAttributes.phpβ (2026-07-01)php-cfg-loop-resolver-continue-switch-warning.patchhunk β (2026-07-03)docs/capabilities.mdβ (2026-07-03)lib/JIT/Builtin/WeakRefNativeOpsJit.phpβ (2026-07-04, PR Bootstrap: sync WeakRefNativeOpsJit spine entries (#15973)Β #15983)ext/standard/JitStreamSupportsFeatureArg.phpβ (2026-07-05, PR Bootstrap: spine sync JitStreamSupportsFeatureArg.php (#16374)Β #16381)lib/VM/Builtin/ReflectionEnumFromName.phpβ (2026-07-07, Stdlib: ReflectionEnum::fromName() static factory missing (PHP 8.2+, ext/reflection/php_reflection.c)Β #16877 regression)docs/capabilities.mdβ (2026-07-08)007-ThrowsWebweb smoke POST invalid β (2026-07-08)MathClampβ (2026-07-08)ReflectionFunctionIsGenerator+ReflectionMethodIsGeneratorβ (2026-07-09, PR Bootstrap: spine sync ReflectionFunction/Method::isGenerator (#17521)Β #17536)009-FastCGIWebAOT smoke PATH_INFO exit 134 β (2026-07-09)ext/dom/FragmentConstruct.phpβ (2026-07-10, PR Bootstrap: spine sync ext/dom/FragmentConstruct.php (#17627)Β #17636)LdapRuntime,JitLdapEscape,LdapEscapeJitHelper) β (2026-07-12, PR Bootstrap: spine sync ldap_escape helpers (#18195)Β #18208/Self-host: sync spine for ldap_escape + xml SAX PHP-in-PHP units (#18195)Β #18213)docs/capabilities.mdβ (2026-07-14, PR Release: regenerate docs/capabilities.md (capability-matrix drift)Β #18836; verified green 2026-07-15)001-SimpleWebAOT smoke (QUERY_STRING=name=Smokeignored) β (2026-07-15, PR AOT: restore user-script htmlspecialchars stub β fix 001-SimpleWeb QUERY_STRING (closes #18832)Β #19142/AOT: restore ObOutputExecCaptureLlvm defer β fix user-script segfault (#18832 follow-up)Β #19144)003-MiniWebAppAOT smoke (exit 134free(): invalid pointer) β (closed 2026-07-16; regressed β Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 munmap_chunk) (re-#19504)Β #20507)isAnonymousClass()inventory (5 files; Add isAnonymousClass() for PHP 8.4 forward profile (#19969)Β #19970 fallout) β (closed 2026-07-17)006-FileUploadWebAOT smoke (multipart upload needle) β (closed 2026-07-17)docs/capabilities.md(capability-matrix gate) β (closed 2026-07-17; 1217 builtins)003-MiniWebAppAOT smoke (exit 134munmap_chunk(): invalid pointer; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 free(): invalid pointer)Β #19504) β (closed 2026-07-18, PR AOT: drop dead thankyou nest from MiniWebApp layout (#20507)Β #20552)009-FastCGIWebAOT smoke (missing PATH_INFO diagnostic; re-Release v1.1.0: fix examples 009-FastCGIWeb AOT smoke (PATH_INFO exit 134 realloc)Β #17522; release-blocker; filed 2026-07-19) β (closed 2026-07-19)docs/capabilities.md+docs/bootstrap-inventory.md(re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate)Β #19980; release-blocker; filed 2026-07-20)ReflectionClassIsCloneable.php(Stdlib: ReflectionClass::isCloneable() missing β __clone visibility (ext/reflection/php_reflection.c)Β #22109; release-blocker; filed 2026-07-22) β (closed 2026-07-22)bootstrap-selfhost-linkLLVM verify oncompiler_minimal(gen-0 Foundation: compiled-driver reuse has no lowering-source freshness guard β Tier-1 workflow can silently test stale codegen (script/bootstrap-resolve-compile-invoke.sh)Β #21855 drift; release-blocker; filed 2026-07-22) β (closed 2026-07-22)phpc buildmodule verification (4 lowering defects; 266/266 helper units degraded) β (closed 2026-07-23, PR Fix AOT module verification: four JIT lowering defects (#22638)Β #22643)003-MiniWebAppAOT smoke (empty$appName/ missingMiniWebAppneedle; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (exit 134 munmap_chunk) (re-#19504)Β #20507) β (closed 2026-07-24, PR AOT: MiniWebApp htmlspecialchars + include $appName (#22845)Β #22871)docs/capabilities.md(capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md + docs/bootstrap-inventory.md (re-#19980)Β #21403; release-blocker; filed 2026-07-26) β (closed 2026-07-26, PR Release: regenerate docs/capabilities.md for capability-matrix gate (#23426)Β #23570; regressed β Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23426)Β #23847)005-SessionsWebAOT smoke (POST flash exit 134free(): invalid pointer; release-blocker; filed 2026-07-26) β (closed 2026-07-26, PR AOT: fix SessionsWeb 005 POST flash free(): invalid pointer (#23427)Β #23549; regressed β Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (Static call class must be a literal; re-#23427)Β #23848 link-time static call)docs/capabilities.md(capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#21403)Β #23426; release-blocker; filed 2026-07-27) β (closed 2026-07-27, PR Docs: resync capabilities.md for capability-matrix gate (#23847)Β #23865; regressed β Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23847)Β #24229)005-SessionsWebAOT smoke (Static call class must be a literal; re-Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (POST flash exit 134 free(): invalid pointer)Β #23427; release-blocker; filed 2026-07-27) β (closed 2026-07-27)docs/capabilities.md(capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23426)Β #23847; release-blocker; filed 2026-07-28) β (closed 2026-07-28)JitMemoryStreamHelper; re-fix(stdlib): ftell() false after failed fseek on php://memory (#25299)Β #25329; release-blocker) β (closed 2026-07-30, PR fix(trust): restore Pillar 1 after #25299 helper/spine falloutΒ #25334)docs/capabilities.md(capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#23847)Β #24229; release-blocker; filed 2026-07-30) β (closed 2026-07-30)003-MiniWebAppAOT smoke (empty$appName/ missingMiniWebAppneedle; re-Release v1.1.0: fix examples 003-MiniWebApp AOT smoke (empty $appName β missing MiniWebApp needle) (re-#20507)Β #22845; release-blocker; filed 2026-07-30) β (closed 2026-07-30)docs/capabilities.md(capability-matrix gate; re-Release v1.1.0: regenerate docs/capabilities.md (capability-matrix gate; re-#24229)Β #25344; release-blocker; filed 2026-08-01) β (closed 2026-08-01)005-SessionsWebAOT smoke (GET flash missing;PHPSESSID=/index.php; re-Release v1.1.0: fix examples 005-SessionsWeb AOT smoke (Static call class must be a literal; re-#23427)Β #23848; release-blocker; filed 2026-08-01) β (closed 2026-08-01)core_fingerprintmismatch / corpus refresh (re-Release blocker: helper-runtime prelink STALE after MathBaseConvertJitHelper (#26903)Β #26914/Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302; release-blocker; filed 2026-08-02) β (closed 2026-08-02, PR Trust: refresh helper-runtime prelink after core_fingerprint drift (#26921)Β #26932; regressed β Foundation: helper-runtime 12 STALE units β release-readiness red (re-#26921/#24302)Β #27239)north-star5-fast4f-m gen-0 manifest/driver mismatch after Trust: refresh gen-0 argv fingerprint after #27221/#27225 (Pillar 1) (#27224)Β #27230 (re-Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713; release-blocker; filed 2026-08-03) β (closed 2026-08-03; regressed β Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27693 (re-#27240/#8713)Β #27696)north-star5-fast4f-m gen-0 manifest/driver mismatch after Trust: refresh helper-runtime prelink + honest gen-0 argv (#10533)Β #27693 (re-Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27230 (re-#8713)Β #27240/Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713; release-blocker; filed 2026-08-05) β (closed 2026-08-05 via Trust: honest gen-0 argv refresh after #27697/#27698 lowering drift (#27696)Β #27701; regressed β Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27710 (re-#27696/#8713)Β #27714)north-star5-fast4f-m gen-0 mismatch after Language: Zend fatal for anonymous class in attribute ctor (#27709)Β #27710 (re-Foundation: north-star5-fast 4f-m gen-0 manifest/driver mismatch after #27693 (re-#27240/#8713)Β #27696/Self-host M5: bootstrap-inventory argv driver size floor β grow beyond 451KB stubΒ #8713; release-blocker) β (closed 2026-08-05 via Trust: honest gen-0 argv refresh after #27710β#27723 lowering drift (#27714)Β #27729 @c9c463922)core_fingerprintmismatch / cold-build timeout (re-Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302/Foundation: helper-runtime core_fingerprint mismatch β release-readiness red (re-#26914/#24302)Β #26921; release-blocker; filed 2026-08-05 afternoon) β (closed 2026-08-05; regressed β Trust: refresh helper-runtime prelink β 3 STALE units after array_fill/getrusage/json_encode (re-#27732)Β #28127 unit-level STALE)ArrayFill/Getrusage/JsonEncodeNestedJitHelpers; re-Trust: refresh helper-runtime prelink β core_fingerprint stale (re-#24302)Β #27732/Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302; release-blocker; filed 2026-08-06) β (closed 2026-08-06; tip recovered mid-day 2026-08-07 β regressed β Trust: refresh helper-runtime prelink β 3 STALE units after round/RoundingMode (re-#28127)Β #28554)Floor/Round/SortJitHelpers after round/RoundingMode; re-Trust: refresh helper-runtime prelink β 3 STALE units after array_fill/getrusage/json_encode (re-#27732)Β #28127/Release blocker: committed helper-runtime cache is stale, so a clean checkout cannot compile hello world in 2 minutesΒ #24302; release-blocker; filed 2026-08-07) β (closed 2026-08-07; tip recovered β regressed β Trust: refresh GraphemeStrSplitJitHelper helper-runtime prelink after #28967 (re-#28963)Β #28968 GraphemeStrSplit β closed via Trust: refresh GraphemeStrSplitJitHelper helper-runtime prelink (#28968)Β #28975)001-SimpleWebAOT smoke (exit 139 segfault afterc:main_after_init; re-Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (QUERY_STRING name=Smoke not parsed)Β #18832/Release v1.1.0: fix examples 000β009 AOT smoke (001-SimpleWeb exit 134 munmap_chunk invalid pointer)Β #13995; release-blocker; filed 2026-08-08)master; refresh before tag)Pillar 1 (Trust) β #10533 (closed; status on #78): π’ quick
user_release_ready: yes@d0b2bc4585(2026-08-08). Inventory OK 7248/7248; helper-runtime 369 fresh / 0 stale; cold-build β (~4s); spine / root-readme / north-star5-fast / vm-driver / gen0-functional β .gen0_provenancestale (drivercc281e13c, 23 lowering commits,unverified-restampβ warning only). Pillar 2 (Ship):--fullred on examples-aot-smoke β #29001.Gate checklist
./script/release-readiness.sh --full --jsonβuser_release_ready: yes(probed 2026-08-08 @d0b2bc4585β no; sole fail examples-aot-smoke β Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-#18832)Β #29001)d0b2bc4585) βuser_release_ready: yescc281e13c, 23 lowering,unverified-restamp) β not a counted quick-gate failrelease-blockerissues (1 open: Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-#18832)Β #29001 β Trust: refresh helper-runtime prelink β 3 STALE units after round/RoundingMode (re-#28127)Β #28554 closed)001-SimpleWebexit 139 afterc:main_after_init)--full)--full; 1173 builtins)Out of scope (v1.1.0)
north-star5-verify --strict(~1h)Bootstrap release roadmap (future v2 / self-host honesty)
Not a tag candidate until
north-star5-verify --strictis green on demand. Track progress only.main()runtimePHP_COMPILER_SELFHOST_AOTon compile spinecompile_driverapply-patches.shanchornorth-star5-verify.sh --strict(~1h)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 (Aug 2026 β release review 2026-08-08)
make bootstrap-selfhost-link/compiler/build/selfhostvia Zend gen-0 fallback; stale native driver (#21855)bootstrap-inventory.php --checkcheck-selfhost-spine-coverage-sync.phpmake bootstrap-selfhost-vm-driver-execute-probemake bootstrap-selfhost-helloworldemit_path=native; stdoutHello Worldcompile_drivermake bootstrap-selfhost-full-revision-probemake bootstrap-loop-probeprelinked/bootstrap-vendor/*.omanifestobject_okBOOTSTRAP_M5_NO_ZEND=1emptybuild/rm prelinked/*.o, no Zend fallbackmake north-star5-verify-fastd0b2bc4585north-star5-verify.sh --strictmain()at runtime--fullrelease-readiness.sh --full001-SimpleWebexit 139; capability-matrix + web smoke greenDaily verify (fast β use during development):
Pre-merge bootstrap verify (strict β sparingly):
./script/docker-exec.sh -- bash -lc './script/north-star5-verify.sh --strict'Next 5 worker priorities (parallel-safe)
release-blockerβ001-SimpleWebexit 139 afterc:main_after_init; no smoke-skip)--fullβ after Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-#18832)Β #29001 β confirmuser_release_ready: yes(capability-matrix + web smoke already green 2026-08-08)cc281e13c(do not restamp;unverified-restampdebt)Parity backlog themes (Jul 2026)
is_callable#3132, ext/zip #3337superglobals_refresh.c#5330,phpc_stream.c#5343Repro (roadmap health check)
Done when (living doc)
implementation-readyissues workers can claim without overlap (2026-08-05 afternoon β Trust: refresh helper-runtime prelink β core_fingerprint stale (re-#24302)Β #27732)implementation-readyissues workers can claim without overlap (2026-08-06 β Trust: refresh helper-runtime prelink β 3 STALE units after array_fill/getrusage/json_encode (re-#27732)Β #28127)implementation-readyissues workers can claim without overlap (2026-08-07 β Trust: refresh helper-runtime prelink β 3 STALE units after round/RoundingMode (re-#28127)Β #28554)implementation-readyissues workers can claim without overlap (2026-08-08 β Release v1.1.0: fix examples 001-SimpleWeb AOT smoke (exit 139 segfault after c:main_after_init; re-#18832)Β #29001)north-star5-verify --fast) default in docs, CI, and Cursor rulesVerification (local / Docker only)