Parity backlog — 2026-06-20 architect run (s) (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: undefined variable E_WARNING missing on read — casts/unary/arithmetic/?? RHS silent (Zend/zend_execute.c) #10358 (language/runtime , IMPORTANT ) — undefined variable E_WARNING missing on read (casts, unary, arithmetic, ?? RHS) (Zend/zend_execute.c)
Stdlib: call_user_func()/call_user_func_array() — string builtin callbacks fail despite is_callable (ext/standard/basic_functions.c) #10359 (stdlib , IMPORTANT ) — call_user_func() string builtin callbacks fail despite is_callable('strlen') (ext/standard/basic_functions.c)
php-in-php: JIT UndefinedVariableWarning — route E_WARNING undefined-variable fetch through VmErrorReporter PHP not silent null (#1492) #10360 (php-in-php ) — JIT UndefinedVariableWarning through VmErrorReporter PHP not silent null (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Stdlib: forward_static_call()/forward_static_call_array() parent outside class — Error not TypeError (ext/standard/basic_functions.c) #10361 (stdlib ) — forward_static_call*() parent outside class scope → Error not TypeError
Stdlib: class_implements(ArrayIterator) — missing SeekableIterator/ArrayAccess/Serializable entries (ext/spl/spl_array.c) #10362 (stdlib ) — class_implements(ArrayIterator) missing SeekableIterator/ArrayAccess/Serializable
Thin issues expanded: #4737 (parse_str() returns null not true + by-ref), #4403 (FILTER_VALIDATE_IP unknown filter ID 275 dispatch).
Queue health: Prior tranche #10345 –#10352 (stdlib edge cases) still open; this run prioritized callable dispatch , undefined-variable warnings , and reflection/SPL interface maps .
Parity backlog — 2026-06-19 architect run 4 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: pipe operator (|>) enum case LHS materializes to backing scalar — must preserve enum object (Zend/zend_compile.c) #10110 (language , IMPORTANT ) — pipe |> LHS enum case materializes to backing scalar not object(E::A) (Zend/zend_compile.c)
php-in-php: JIT GeneratorHelper — route yield/generator LLVM through VmGenerator PHP not ~1.5k-line monolith (#1492) #10105 (php-in-php ) — shrink JIT GeneratorHelper ~1.5k LLVM via VmGenerator PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
php-in-php: JIT ClosureBindHelper — route Closure::bind/bindTo LLVM through VmClosure PHP not ~715-line monolith (#1492) #10109 (php-in-php ) — shrink JIT ClosureBindHelper ~715 LLVM via shared ClosureBindHandler PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Stdlib: gc_collect_cycles() return count — counts non-cyclic dtor as collected (Zend/zend_gc.c) #10111 (stdlib ) — gc_collect_cycles() returns 1 on non-cyclic dtor; Zend returns 0 (Zend/zend_gc.c)
php-in-php: JIT PropertyHookDispatch — route property hook LLVM through VmPropertyHook PHP not ~475-line monolith (#1492) #10112 (php-in-php ) — shrink JIT PropertyHookDispatch ~475 LLVM via VmPropertyHook PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Also filed: #10113 — iterator_count() closed-generator Exception message mismatch (extends #5132 partial fix).
Thin issues expanded: #5132 (throw now works; message gap → #10113 ), #3295 (full mt_rand done-when + verification matrix), #9725 (static hook dispatch green; narrow to isset/unset).
Queue health: Enum/named-arg batch (#10093 –#10100 ) well covered; this run prioritized php-in-PHP LLVM shrink (generators, closures, property hooks) + pipe enum preservation + GC return count .
---## Parity backlog — 2026-06-19 architect run 3 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
php-in-php: JIT SuperglobalRefreshRuntime — route CGI $_SERVER/$_GET refresh through Superglobals PHP not ~1.9k-line LLVM (#1492) #9907 (php-in-php , web ) — SuperglobalRefreshRuntime ~1.9k LLVM → lib/Web/Superglobals.php PHP (CGI $_SERVER refresh)
php-in-php: JIT StringPasswordCryptoJit — route password_hash/verify through VmPassword PHP not ~917-line LLVM (#1492) #9908 (php-in-php , stdlib ) — StringPasswordCryptoJit ~917 LLVM → VmPassword PHP (password_hash/verify)
Language: file-scope final typed constants (final const string X) — parse fails PHP 8.4 (Zend/zend_compile.c) #9909 (language , IMPORTANT ) — file-scope final const string PHP 8.4 parse fails (extends Language: file-scope typed constants (const string|array X) — parse fails at global/namespace scope (PHP 8.3, zend_compile.c) #7081 )
php-in-php: JIT StringQuotPrintJit — route quoted_printable_encode/decode through VmString PHP not ~514-line LLVM (#1492) #9910 (php-in-php , stdlib ) — StringQuotPrintJit ~514 LLVM → VmString quot_print PHP
php-in-php: JIT StringUtf8Latin1Jit — route utf8_encode/decode through VmString PHP not ~412-line LLVM (#1492) #9912 (php-in-php , stdlib ) — StringUtf8Latin1Jit ~412 LLVM → VmString utf8_encode/decode PHP
Thin issues expanded: #676 (MiniWebApp AOT unskip matrix + implementation-ready), #6317 (DOMDocumentFragment repro/done-when). #9677 comment: duplicate enum now silently runs (compile-time fatal missing). #8949 comment: weakmap_enum_foreach.phpt still red.
Queue health: Recent enum/property-hook batch (#9830 –#9894 ) well covered; this run prioritized php-in-PHP LLVM shrink (web CGI + stdlib MIME/password) and PHP 8.4 final const language gap.
Parity backlog — 2026-06-19 architect run 2 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Regression: enum case ::class — operand still backing int after #9827 (Zend/zend_compile.c) #9830 (language , IMPORTANT ) — regression: enum case ::class still TypeError on int operand after Close #9811: enum case ::class pseudo-const guard tests #9827
Language: property hook + private backing field — compile Cannot redeclare (Zend/zend_compile.c) #9831 (language , IMPORTANT ) — property hook + private backing field compile Cannot redeclare
Bootstrap: __DIR__/__FILE__ MagicScriptConst — TypeReconstructor fatal blocks compile (php-types, Zend magic constants) #9833 (bootstrap , IMPORTANT ) — __DIR__/__FILE__ MagicScriptConst` fatal in php-types TypeReconstructor
Language: get-only property hook isset/empty must invoke get hook (Zend/zend_property_hooks.c) #9832 (language ) — get-only hook isset/empty skips get hook (false/true vs true/false)
Stdlib: array_shift/array_pop/array_unshift on inline array literal — by-ref Error (ext/standard/array.c) #9834 (stdlib ) — array_shift/pop/unshift on inline literal by-ref Error (Zend accepts)
Also filed: #9835 readonly + property hooks compile rejected (Hooked properties cannot be readonly).
Specs upgraded: #9750 pipe operator VM partial — JIT/AOT + compliance finish; #3325 curl partial (curl_init exists) — setopt/exec/getinfo remain; #6772 static asymmetric reflection repro table.
Worker queue: enum ::class root #9830 before leaf stdlib; property-hook compile #9831 before #9832 /#9800 ; bootstrap #9833 unblocks __DIR__ spine scripts.
Parity backlog — 2026-06-19 architect run (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: enum case ::class pseudo-constant — TypeError when case materialized as backing scalar (Zend/zend_compile.c) #9811 (language , IMPORTANT ) — enum case ::class pseudo-constant fatals (TypeError on scalarized case); VM has TYPE_ENUM_CASE path but fetch returns int
Language: clone-with syntax clone($obj, ['prop']) — parse + selective reinit missing (PHP 8.5, Zend/zend_language_parser.y) #9803 (language , IMPORTANT ) — PHP 8.5 clone($obj, ['prop']) parse + selective reinit missing
php-in-php: JIT StringVersionCompareJit — route version_compare() through VmInfo PHP not ~800-line LLVM (#1492) #9813 (php-in-php ) — version_compare() JIT still ~800-line LLVM — route through VmInfo PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Stdlib: http_get_last_response_headers() — stub returns empty array, never captures wrapper headers (PHP 8.4, ext/standard/http.c) #9752 (stdlib ) — http_get_last_response_headers() stub never captures wrapper headers (PHP 8.4)
php-in-php: JIT StringStrtokJit — route strtok() through VmString PHP not ~480-line phpc_strtok LLVM (#1492) #9812 (php-in-php ) — strtok() JIT ~480-line LLVM duplicate of VmString PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Also filed: #9814 putenv/getenv LLVM overlay → VmEnv PHP; #9815 stream fsync/fdatasync LLVM → VmPhpFdStream PHP.
Specs upgraded: #4036 get_object_vars() parent private/protected key leak (inline repro + php-src-strict done-when); #6097 class_has_lazy_object_uninitializer() probe + TypeError operand table.
Worker queue: enum preservation cluster (#9811 , #9727 , #9726 , #9790 ) and PHP 8.4 property hooks (#9754 , #9725 , #9800 ) — one issue per run.
Parity backlog — 2026-06-18 architect run 9 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: enum case typed parameter receives backing scalar — TypeError not enum object (Zend/zend_enum.c) #9730 (language , IMPORTANT ) — enum case typed parameter receives backing scalar (TypeError: int given); root enum object preservation
Regression: enum case instance method dispatch — E::Case->method() fatals (re-#9658, Zend/zend_enum.c) #9726 (language , IMPORTANT ) — regression: E::Case->method() → Method call on non-object (re-Language: enum case instance method dispatch — E::Case->method() fatals Method call on non-object (Zend/zend_enum.c) #9658 )
Regression: enum case loose == / != with backing scalar returns true (re-#9660/#9583, Zend/zend_operators.c) #9727 (language , IMPORTANT ) — regression: E::A == backing loose compare still true (re-Language: loose == / != between enum case and backing scalar must be false (Zend/zend_operators.c) #9660 /Language: backed enum case ==/===/<=> with scalar operands must be false — not backing coercion (zend_operators.c) #9583 )
Bootstrap regression: PHP 8.4 asymmetric visibility parse blocked — php-cfg overlay anchor missing (re-#7468/#7460, Zend/zend_compile.c) #9729 (bootstrap , IMPORTANT ) — PHP 8.4 public private(set) parse blocked — php-cfg overlay anchor missing (re-Bootstrap: php-cfg-asymmetric-visibility Param.php overlay anchor missing — blocks public private(set) parse (#7460) #7468 )
php-in-php: JIT StringSimilarTextJit — route similar_text() through VmString PHP not ~420-line LLVM (#1492) #9731 (php-in-php ) — shrink StringSimilarTextJit LLVM (~420 lines) → SimilarTextJitHelper PHP
Also filed: #9728 static-closure bindTo/bind regression (re-#9645 ).
Specs upgraded: #9052 ini_get_all('standard') filter gap verified; #5125 locale_get_* edge-case matrix; #9093 getopt() -r vs script-file argv paths.
Worker queue: treat #9730 as enum-cluster root before leaf stdlib coercions (#9682 –#9716 ).
Parity backlog — 2026-06-18 architect run 8 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: enum case as parameter/property default must compile (Zend/zend_compile.c) #9715 (language , IMPORTANT ) — enum case as parameter/property default must compile; today Cannot use int as default value for type E
Language: file-scope const with enum case materializes backing scalar (Zend/zend_constants.c) #9711 (language , IMPORTANT ) — file-scope const G = E::A materializes backing scalar not enum case object
Language: class/interface const with enum case materializes backing scalar (Zend/zend_constants.c) #9712 (language ) — class/interface const X = E::A materializes int not enum case (C::X === E::A false)
Language: list() destructuring with enum-case array key must TypeError (Zend/zend_execute.c) #9713 (language ) — list() destructuring with enum-case array key must TypeError: Illegal offset type
Language: readonly promoted property — child constructor cannot initialize parent readonly (Zend/zend_compile.c) #9714 (language ) — child constructor must not initialize parent readonly promoted property
Also filed: #9716 match() enum subject vs scalar int arms (inverse of #9566 ); #9717 (php-in-php ) AOT CloneWithReinitRuntimeLlvm still ~320-line LLVM — finish #9498 PHP helper path.
Specs upgraded: #5695 mbstring module skeleton verification; #3741 pgsql v1 pg_connect/pg_query slice.
Worker queue: enum preservation cluster (#9682 , #9685 , #9702 ) + named-arg stdlib (#9646 , #9647 ) remain highest-impact from prior runs.
Parity backlog — 2026-06-18 architect run 7 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed (implementation-ready):
Language: match() scalar subject must not match enum-case arms via backing coercion (Zend/zend_execute.c) #9566 (language , IMPORTANT ) — match(1) { E::A => … } hits via backing coercion — Zend throws UnhandledMatchError
Language: switch() scalar subject must not match enum case labels via backing coercion (Zend/zend_execute.c) #9567 (language , IMPORTANT ) — switch(1) { case E::A: } hits — Zend prints miss
Language: backed enum arithmetic with int/float must TypeError — E::A + 1 (Zend/zend_operators.c) #9568 (language , IMPORTANT ) — E::A + 1 → 2 — Zend TypeError (enum numeric ops)
Language: (object) cast on enum case must return same enum case — not empty stdClass (Zend/zend_operators.c) #9569 (language ) — (object) E::A → empty object — Zend returns same enum case (=== true)
php-in-php: JIT Refcount LLVM — shrink __ref__ zval refcount layer via VmValue PHP helpers (#1492) #9570 (php-in-php ) — Shrink lib/JIT/Builtin/Refcount.php ~1.7k-line __ref__ LLVM → VmValue PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Specs upgraded: #3352 (grapheme umbrella VM status + repro paths), #6246 (grapheme_str_split VM landed; JIT/PHPT remain).
Worker queue: enum identity cluster (#9566 –#9569 ) shares compare helper with #9546 ; #9570 parallelizes with JIT migration batch (#9542 –#9545 ).
Parity backlog — 2026-06-18 architect run 6 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Language: class constant expression must reject new — VM accepts illegal const initializer (Zend/zend_compile.c) #9517 (language ) — Class constant expression must reject new — VM runs const X = new C(1) (Zend/zend_compile.c)
Language: enum case value ::class must return enum name — VM TypeError on backing scalar (Zend/zend_enum.c) #9518 (language ) — Enum case value ::class must return enum name — VM TypeError on backing scalar (Zend/zend_enum.c)
Stdlib: similar_text() must TypeError on int operands — VM coerces to string (ext/standard/string.c) #9519 (stdlib ) — similar_text() must TypeError on int operands — VM coerces (distinct from Stdlib: str_word_count()/strrev()/chunk_split()/similar_text()/levenshtein()/substr_count() — enum case operands must TypeError (string.c) #8797 enum cases)
Language: static property hooks (PHP 8.4) — compile + get/set dispatch parity (Zend/zend_property_hooks.c) #9520 (language , IMPORTANT ) — PHP 8.4 static property hooks compile + JIT parity (Zend/zend_property_hooks.c)
php-in-php: JIT ProgressNoteRuntime — route __phpc_progress_note through PHP not ~340-line LLVM (#1492) #9521 / php-in-php: JIT ReadonlyRaise — route readonly property write errors through Vm PHP not ~385-line LLVM (#1492) #9522 (php-in-php ) — Shrink ProgressNoteRuntime / ReadonlyRaise LLVM (~725 lines) → compiled PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Specs upgraded: #4645 (WeakMap object keys + #9194 enum cross-ref), #6451 (ReflectionProperty::setRawValue/getRawValue full repro).
Worker queue: enum preservation regressions (#9435 , #9436 , #9289 ) remain hot; also mirrored on #9350 .
Parity backlog — 2026-06-18 architect run 5 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Regression: duplicate backed enum values — no Error at first use (re-#8876, Zend/zend_enum.c) #9494 (language , IMPORTANT ) — Regression: duplicate backed enum values — no Error at first use (re-Regression: duplicate backed enum values — no Error at first use (zend_enum.c, re-#5773) #8876 , Zend/zend_enum.c)
php-in-php: JIT SessionStorageRuntime — route session file I/O through VmSession PHP not ~1.1k-line LLVM (#1492) #9495 (php-in-php ) — SessionStorageRuntime (~1.1k LLVM) → VmSession PHP (ext/session/mod_files.c)
php-in-php: JIT CtypeRuntime — route __phpc_ctype_* through CtypeJitHelper PHP not LLVM bridges (#1492) #9496 (php-in-php ) — CtypeRuntime LLVM bridges → CtypeJitHelper PHP (pairs Regression: ctype_*() — enum case operands return true not false (re-#8962, ext/standard/ctype.c) #8995 enum operands)
php-in-php: JIT ObStatusRuntime — route ob_get_status/ob_list_handlers through VmOutput PHP not LLVM globals (#1492) #9497 (php-in-php ) — ObStatusRuntime → VmOutput PHP (pairs Stdlib: ob_get_status() — JIT/AOT lowering (phase 2, ext/standard/output.c) #4877 ob_get_status)
php-in-php: JIT CloneWithReinitRuntime — route readonly-clone reinit through VmCloneWith PHP not LLVM (#1492) #9498 (php-in-php ) — CloneWithReinitRuntime → CloneWithSupport PHP (Zend/zend_clone.c)
Also filed: #9499 DateIntervalFormatRuntime, #9500 SessionCreateIdRuntime.
Specs upgraded: #6048 (PHP 8.3 date exception hierarchy repro matrix), #5965 (request_parse_body() + RequestParseBodyException multipart repro).
Worker queue: prefer #9494 (enum regression) and #9495 (largest session LLVM blob); also mirrored on #9350 .
Parity backlog — 2026-06-18 architect run 4 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Regression: constant('E::A') returns backing int not enum case object (Zend/zend_enum.c) #9475 (language /stdlib ) — constant('E::A') returns backing int(1) not enum case object (Zend/zend_enum.c; pairs Stdlib: constant() — resolve user/class constant by name (ext/standard/basic_functions.c parity) #3484 )
php-in-php: JIT SpaceshipCompareJit — route <=> through CompareJitHelper PHP not ~1.2k-line LLVM (#1492) #9476 (php-in-php ) — SpaceshipCompareJit (~1.2k LLVM) → CompareJitHelper PHP (anchors Regression: enum relational operators — < and <=> order inverted vs Zend (re-#9016, zend_enum.c) #9288 enum <=> order)
Language: (int) cast on enum case must emit E_WARNING like Zend (Zend/zend_enum.c) #9479 (language ) — (int) cast on enum case missing E_WARNING (Zend/zend_operators.c; pairs Stdlib: settype() on enum cases — must emit Warning before int coercion (ext/standard/type.c, php-src-strict) #8974 )
php-in-php: JIT StreamNotificationRuntime — route stream_notification_callback through ext/standard PHP not LLVM global (#1492) #9478 (php-in-php ) — StreamNotificationRuntime → ext/standard/stream_notification_callback.php PHP registry
php-in-php: JIT StreamPathRuntime — route __phpc_stream_path through VmFs PHP not LLVM handle table (#1492) #9480 (php-in-php ) — StreamPathRuntime → VmFs stream path metadata (JIT fstat parity php-in-php: fstat()/stream path stat — delete __phpc_fstat from phpc_stream.c, VmStream PHP stat (pairs #5343) #6764 )
Also filed: #9477 — RewriteVarsRuntime → ResponseContext PHP (web mod_rewrite vars).
Specs upgraded: #9168 (fiber start()/resume() return propagation + php-src refs; closes #9063 ), #4408 (hash_hmac() invalid algo → ValueError not false).
Worker queue: enum preservation cluster (#9435 –#9437 , #9006 UnitEnum::cases()) still IMPORTANT; no overlap with #9470 –#9474 (prior run).
Parity backlog — 2026-06-18 architect run 3 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Language: foreach() on objects with property hooks must invoke get hook (Zend/zend_property_hooks.c) #9470 (language ) — foreach ($obj) on property-hook objects must invoke get hook; fatal on uninitialized typed backing (Zend/zend_property_hooks.c; pairs Stdlib: get_object_vars() — property hooks must invoke get hook (zend_property_hooks.c) #5203 get_object_vars)
Stdlib: array_all()/array_any() callbacks receive enum backing scalars — must pass enum objects (ext/standard/array.c) #9471 (stdlib ) — array_all() / array_any() unwrap enum cases to backing scalars in callbacks (instanceof E → false; ext/standard/array.c; pairs Stdlib: array_find() callback receives backing scalar for enum case elements (must pass enum objects) #9038 / Stdlib: array_map()/array_filter() on enum arrays must preserve enum case objects (ext/standard/array.c) #5564 )
php-in-php: JIT ErrorHandlerJitRuntime — route set_error_handler through VmErrorHandler PHP not ~556-line LLVM (#1492) #9472 (php-in-php ) — ErrorHandlerJitRuntime (~556 LLVM) → VmErrorHandler PHP (set_error_handler stack)
php-in-php: JIT ExceptionHandlerJitRuntime — route set_exception_handler through VmExceptionHandler PHP not ~602-line LLVM (#1492) #9473 (php-in-php ) — ExceptionHandlerJitRuntime (~602 LLVM) → VmExceptionHandler PHP (set_exception_handler stack)
php-in-php: JIT GethostbyaddrRuntime — route gethostbyaddr() through VmDns PHP not glibc LLVM (#1492) #9474 (php-in-php ) — GethostbyaddrRuntime (~223 glibc LLVM) → VmDns PHP (pairs php-in-php: JIT GethostbynamelRuntime — route gethostbynamel() through VmDns PHP not glibc addrinfo LLVM (#1492) #9382 gethostbynamel)
Specs upgraded: #5156 (intl error helpers — existence + forced-error repro matrix), #6188 (IntlBreakIterator family — class existence + word-break repro).
Worker queue: no overlap with in-flight regressions #9447 –#9463 ; property-hook foreach (#9470 ) is language IMPORTANT-adjacent for PHP 8.4 apps.
Parity backlog — 2026-06-18 architect run 2 (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Regression: throw expression non-throwing branch returns empty — ?? RHS must yield value (Zend/zend_compile.c) #9447 (language ) — Regression: throw expression non-throwing ?? branch returns empty not LHS value (Zend/zend_execute.c; pairs Language: throw as expression (?? / ?: contexts) — parse/compile/runtime parity (Zend) #9209 )
php-in-php: JIT StringStrGetcsvJit/StringFgetcsvJit — route fgetcsv/str_getcsv through VmCsv PHP not ~870-line LLVM (#1492) #9444 (php-in-php ) — StringStrGetcsvJit/StringFgetcsvJit (~870 LLVM) → VmCsv/VmFs PHP (pairs Stdlib: str_getcsv()/fgetcsv() — escape=enclosure " parses quoted fields wrong (ext/standard/file.c) #9303 CSV parity)
php-in-php: JIT SessionLifecycleRuntime — route session_start/write_close/destroy through VmSession PHP not ~460-line LLVM (#1492) #9446 (php-in-php ) — SessionLifecycleRuntime (~460 LLVM) → VmSession PHP (session_start/destroy cluster)
php-in-php: JIT StringHtmlspecialchars — route htmlspecialchars/htmlentities through VmString PHP not ~420-line LLVM (#1492) #9445 (php-in-php ) — StringHtmlspecialchars (~420 LLVM) → VmString PHP (pairs Stdlib: strip_tags()/htmlspecialchars() enum case operands must TypeError (ext/standard/string.c, php-src-strict) #5897 enum TypeError)
php-in-php: JIT StreamLifecycleJit — route is_resource/fclose/feof/fflush through VmFs PHP not ~395-line LLVM (#1492) #9442 (php-in-php ) — StreamLifecycleJit (~395 LLVM) → VmFs PHP (is_resource/fclose/feof/fflush)
Also filed: #9443 — StringHttpBuildQuery JIT → VmHttpBuildQuery PHP (pairs #8733 enum encoding).
Specs upgraded: #9209 (throw-expression umbrella + #9447 repro), #9208 (mb_ltrim/mb_rtrim exist; blocked on #4636 mb_internal_encoding), #5698 (array_* aliases now registered — close when comparator issues land).
Worker queue: enum preservation cluster (#9435 –#9437 , #9335 ) still IMPORTANT; claim #9447 before #9209 umbrella close.
Parity backlog — 2026-06-18 architect run (this pass)
Comments disabled on this issue (>2500). Summary prepended to body.
Top 5 gaps filed / upgraded (implementation-ready):
Stdlib: gzopen() returns false on php://memory — wrapper streams must open (ext/zlib/zlib.c) #9407 (stdlib ) — gzopen on php://memory returns false; Zend opens wrapper gzip streams (ext/zlib/zlib.c)
php-in-php: JIT ProcessOpenJit — route proc_open/proc_close through VmProcess PHP not ~1.1k-line LLVM (#1492) #9408 (php-in-php ) — ProcessOpenJit (~1.1k LLVM) → VmProcess PHP for proc_open/proc_close (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
php-in-php: JIT StringVersionCompareJit — route version_compare() through VmInfo PHP not ~800-line LLVM (#1492) #9409 (php-in-php ) — StringVersionCompareJit (~800 LLVM) → VmInfo PHP version_compare
php-in-php: JIT DefineRuntime — route define()/defined() through Vm Context PHP not LLVM hashtable (#1492) #9410 (php-in-php ) — DefineRuntime LLVM user-constant table → VM Context PHP SSOT
php-in-php: JIT SessionGcRuntime — route session_gc() through VmSession PHP not LLVM file scan (#1492) #9411 (php-in-php ) — SessionGcRuntime LLVM → VmSession PHP for session_gc()
Specs upgraded: #9048 (spl_autoload JIT), #9047 (stream_filter JIT) — full repro + docker-exec + done-when.
Worker queue: recent open issues are largely implementation-ready; enum instanceof #9335 , bootstrap #9068 / #9252 remain IMPORTANT blockers.
2026-06-17 parity gap summary (filed this run)
Worker-ready issues filed/updated:
(Also expanded: #8685 define() enum-case arg must TypeError before coercion.)
---## Parity backlog — 2026-06-17 architect run 4 (this pass)
Note: comments are disabled on this issue; update prepended to body.
Top gaps filed / upgraded (implementation-ready):
Bootstrap/self-host: remove Compiler::compileFunc entry stub on M3 compile spine #9213 (bootstrap/php-in-php) — Remove Compiler::compileFunc entry stub on M3 compile spine (selfhost AOT stub audit).
php-in-php: compiler_language_warning() must work in JIT/AOT (continue targeting switch warning parity) #9214 (php-in-php) — compiler_language_warning() must work in JIT/AOT for Zend language warnings (continue targeting switch).
Stdlib: get_headers() parity — associative arg index + wrapper behavior (ext/standard/head.c) #9212 (stdlib) — get_headers() parity: $associative arg index + wrapper behavior; JIT/AOT currently throws.
Stdlib: array_is_list() parity (ext/standard/type.c) #9210 (stdlib, upgraded spec) — array_is_list() php-src parity with explicit docker-exec repro commands + scope.
Stdlib: class_alias() parity (Zend/zend_builtin_functions.c) #9211 (stdlib, upgraded spec) — class_alias() php-src parity with corrected php-src ref + scope + commands.
Parity backlog — 2026-06-17 architect run 3 (this pass)
Note: comments disabled on this issue (>2500). Summary prepended to body; mirror on #78 if needed.
Top 5 gaps filed (implementation-ready):
Regression: duplicate backed enum values — first-use Error still missing (Zend/zend_enum.c, re-#8876) #9193 (language , IMPORTANT) — Regression: duplicate backed enum values — first-use Error still missing (Zend/zend_enum.c, re-closed Regression: duplicate backed enum values — no Error at first use (zend_enum.c, re-#5773) #8876 )
Stdlib: get_class_methods() on backed enum case — must list enum methods not fatal (ext/standard/basic_functions.c) #9192 (stdlib/language ) — get_class_methods() on backed enum case must list enum methods, not fatal (ext/standard/basic_functions.c)
Stdlib: WeakMap::offsetSet() must accept backed enum case keys (Zend/zend_weakrefs.c) #9194 (stdlib/language ) — WeakMap::offsetSet() must accept backed enum case keys (Zend/zend_weakrefs.c)
php-in-php: JIT StringVarDumpJit — route var_dump() through VmVar PHP not __compiler_var_dump LLVM (#1492) #9195 (php-in-php ) — JIT StringVarDumpJit → route var_dump() through VmVar PHP not __compiler_var_dump LLVM
php-in-php: JIT StringStripTagsJit — route strip_tags() through VmString PHP not superglobals_refresh LLVM (#1492) #9196 (php-in-php ) — JIT StringStripTagsJit → route strip_tags() through VmString PHP not LLVM tag parser
Also filed: #9197 — php-in-php: @ silence via VmErrorHandler not __compiler_begin/end_silence LLVM.
Upgraded specs: #9177 , #9178 — vendor patch apply failures blocking make test-fast.
Queue note: Enum-case-as-scalar root (#5509 , #8932 ) amplifies #9192 /#9194 . Prior run items #9185 –#9191 remain parallel work.
Parity backlog — 2026-06-17 architect run 2 (this pass)
Note: comments are disabled on this issue. Summary prepended to body; also mirrored on #78 .
Top 5 gaps filed / upgraded (implementation-ready):
Language: instance-method first-class callable — $obj->method(...) fails parseAndCompile (Zend/zend_compile.c) #9185 (language ) — Instance-method first-class callable $obj->method(...) fails parseAndCompile (Zend produces bound Closure). Builtin/static FCC largely fixed; pairs narrowed Language: first-class callable syntax — strlen(...) yields NULL not Closure (Zend/zend_compile.c) #9170 .
php-in-php: JIT StringSerialize — route serialize() through VmSerialize PHP not __compiler_serialize LLVM (#1492) #9180 (php-in-php ) — JIT serialize() still uses LLVM StringSerialize hashtable walker; route through VmSerialize PHP (pairs php-in-php: JIT StringUnserialize — route unserialize() through VmUnserializeFormat PHP not __compiler_unserialize LLVM (#1492) #9163 unserialize migration).
php-in-php: JIT time builtins — route microtime/getdate/localtime/idate through VmDate PHP not libc LLVM (#1492) #9181 (php-in-php ) — JIT libc time cluster (microtime/getdate/localtime/idate) duplicates VmDate PHP; shrink StringMicrotime/StringGetdate/… LLVM.
php-in-php: JIT GcCollectCyclesNative — route gc_collect_cycles() through Vm CycleCollector PHP not phpc_gc.c LLVM (#1492) #9183 (php-in-php ) — gc_collect_cycles() JIT uses GcCollectCyclesNative/phpc_gc.c; route through CycleCollector PHP (pairs php-in-php: JIT GcStatusRuntime — route gc_status() through VmGcStatus PHP not LLVM hashtable builder (#1492) #9150 gc_status).
Stdlib: json_encode() flags and JSON_* constants (ext/json parity, phase 2 of #3267) #3281 (stdlib , upgraded) — json_encode flags partial: JSON_THROW_ON_ERROR on invalid UTF-8 still missing JsonException on VM.
Also filed: #9182 (hrtime JIT php-in-php), #9184 (getrusage JIT php-in-php). Upgraded: #9170 (FCC default-parameter scope only; instance → #9185 ).
Still high-signal from prior queue: #9147 BackedEnum::from, #9063 Fibers JIT, #9076 array_multisort by-ref NULL.
Parity backlog — 2026-06-17 architect run (this pass)
Note: comments are disabled on this issue. Summary appended to body; also mirrored on #78 .
Top 5 gaps filed / upgraded (implementation-ready):
Compiler: __DIR__/__FILE__ Expr_MagicScriptConst fails parseAndCompile — blocks file_exists(__DIR__) (#9127) #9136 (IMPORTANT ) — Compiler: __DIR__/__FILE__ Expr_MagicScriptConst fails parseAndCompile (root cause for Regression: file_exists()/is_dir()/is_file() with inline __DIR__/__FILE__ return false (magic constant lowering) #9127 file stat magic-const scripts).
php-in-php: JIT StringFormatJit — route sprintf/printf/number_format through VmSprintf not libc LLVM (#1492) #9131 — php-in-php: JIT sprintf/printf/number_format libc LLVM → route through VmSprintf PHP.
php-in-php: JIT calendar builtins — route mktime/strftime/strptime/gmmktime through VmDateTimeNative not libc LLVM (#1492) #9132 — php-in-php: JIT mktime/strftime/strptime libc LLVM → route through VmDateTimeNative PHP.
php-in-php: JIT StringPregMatchJit — route preg_match/preg_replace through ext/pcre PHP not libpcre2 LLVM (#1492) #9135 — php-in-php: JIT preg_match/preg_replace libpcre2 LLVM → route through ext/pcre PHP (VmPcre).
Language: UnitEnum::cases() returns empty array — must list all enum cases (Zend/zend_enum.c) #9006 — Language: UnitEnum::cases() returns empty array on VM (verified red locally).
Also filed: #9133 (pack → PackEngine), #9134 (sscanf → VmSscanf). Expanded: #9051 (ext/uri PHP 8.4 API), #9063 (Fibers rescoped — VM basic OK, JIT/FiberError remain).
Worker hint: fix #9136 before #9127 runtime checklist; php-in-php JIT migrations (#9131 –#9135 ) shrink LLVM link surface for self-host.## Parity backlog — 2026-06-16 architect run (this pass)
Note: comments are disabled on this issue. Summary appended to body; also mirrored on #78 .
Top 5 gaps filed / upgraded (implementation-ready):
Self-host: docker-exec bootstrap-selfhost-helloworld fails (Error 139) due to apply-patches.sh segfault #9040 (IMPORTANT ) — ./script/docker-exec.sh self-host path segfaults in script/apply-patches.sh (blocks docker-based bootstrap probes).
Stdlib: serialize(Closure) must throw (disallow Closure serialization like Zend) #9042 — php-src parity: serialize(Closure) must throw (Zend forbids Closure serialization; VM currently allows).
Stdlib: sprintf() missing %F conversion specifier (should match Zend) #9043 — stdlib parity: sprintf() missing %F conversion specifier (VM throws, Zend prints float).
Stdlib/JIT: stripos()/strripos() case-insensitive search hits JitStringSearch::find() unimplemented #9045 — JIT parity: case-insensitive string search lowering missing (JitStringSearch::find() unimplemented; impacts stripos/strripos).
Language: Closure::fromCallable([EnumCase, 'method']) treats case name as class (should call method on enum case object) #9039 / Stdlib: array_find() callback receives backing scalar for enum case elements (must pass enum objects) #9038 — upgraded specs: enum case object semantics in Closure::fromCallable([E::A,'m']) and array_find() callback value passing.
Worker hint: #9040 is the immediate unblocker to restore the recommended docker wrapper workflows for #1492 .
Top gaps filed / upgraded (this run — array by-ref bugs + bootstrap spec):
Stdlib: array_multisort() clobbers array arguments to NULL (variadic by-ref) #9076 (IMPORTANT ) — array_multisort() clobbers array args to NULL (variadic by-ref semantics; non-enum repro).
Stdlib: usort()/uasort()/uksort() clobber array argument to NULL (by-ref + callback) #9075 (IMPORTANT ) — usort()/uasort()/uksort() clobber array arg to NULL (by-ref + callback; non-enum repro).
Stdlib: array_walk() clobbers array argument to NULL (by-ref arg handling) #9074 — array_walk() clobbers array arg to NULL (by-ref arg semantics; non-enum repro).
Self-host: bootstrap-selfhost-helloworld fails (compile_driver) — parseAndCompile 'Unknown type encountered' #9068 (IMPORTANT ) — upgraded to implementation-ready: make bootstrap-selfhost-helloworld fails (Unknown type encountered).
Release v1.1.0: fix check-selfhost-spine-coverage-sync gate #9066 (IMPORTANT ) — upgraded to implementation-ready: release readiness spine coverage gate fails (exit 255).
Worker hint: the array by-ref clobber bugs are high-impact stdlib correctness gaps (independent of enum materialization issues #8881 /#8867 /#5567 ).
Parity backlog — 2026-06-16 architect run (latest)
Comments disabled at 2500 — summary appended to body. Mirror on #78 .
Top 5 gaps filed (this pass):
Regression: WeakMap enum case object keys — TypeError not Zend object key (re-#8949, Zend/zend_weakrefs.c) #8993 — Regression: WeakMap enum case object keys — VM TypeError not Zend object key (re-Language: WeakMap enum case object keys — VM fatal, Zend accepts (Zend/zend_weakrefs.c) #8949 , zend_weakrefs.c)
Regression: ctype_*() — enum case operands return true not false (re-#8962, ext/standard/ctype.c) #8995 — Regression: ctype_*() enum operands return true not false (re-Stdlib: ctype_*() — enum case operands must return false not coerce backing string (ext/standard/ctype.c) #8962 , ext/standard/ctype.c)
Stdlib: strncmp()/strncasecmp() — enum case operands must TypeError (ext/standard/string.c, php-src-strict) #8996 — Stdlib: strncmp()/strncasecmp() enum operands must TypeError (ext/standard/string.c)
Stdlib: htmlspecialchars()/htmlentities()/urldecode()/rawurldecode()/mb_convert_encoding() — enum operands must TypeError (string.c, mbstring.c) #8997 — Stdlib: htmlspecialchars/htmlentities/urldecode/rawurldecode/mb_convert_encoding enum operands (string.c, mbstring.c)
php-in-php: JIT/AOT __compiler_touch/__compiler_tempnam/__compiler_mkdir — route filesystem LLVM helpers through VmFs PHP (#1492) #8999 — php-in-php: JIT/AOT __compiler_touch/__compiler_tempnam/__compiler_mkdir — route through VmFs PHP, drop libc LLVM helpers (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Also filed: #8998 (preg_quote() enum operand).
Upgraded specs: #3202 (fsockopen partial — VM registered, JIT/AOT + #8953 FFI remain) · #5221 (ReflectionClass::isReadOnly() verified repro table).
Worker hint: complements enum-coercion cluster; this pass adds closed-issue regressions (WeakMap/ctype), strncmp/HTML-URL-mb enum guards , and JIT filesystem libc shrink .
Parity backlog — 2026-06-15 architect run
Comments disabled at 2500 — summary appended to body. Mirror on #78 .
Top 5 gaps filed (this pass):
Regression: random_bytes() — enum case length operand coerces not TypeError (re-#6160, random.c) #8832 — Regression: random_bytes() enum $length coerces not TypeError (re-Stdlib: random_bytes() — enum case length operand must TypeError not silent coerce (php-src-strict) #6160 , random.c)
Stdlib: proc_open/shell_exec/passthru/system/exec() — enum case command operands must TypeError (proc_open.c, exec.c) #8833 — Stdlib: proc_open/shell_exec/passthru/system/exec enum command operands (proc_open.c, exec.c)
Language: pipe operator (|>) — PHP 8.5 parse + compile (zend_language_parser.y) #8836 — Language: PHP 8.5 pipe operator |> parse + compile (zend_language_parser.y)
php-in-php: VmZlibNative — pure PHP zlib encode/decode, drop libz FFI (#1492, ext/zlib/zlib.c) #8837 — php-in-php: VmZlibNative → pure PHP zlib, drop libz FFI (ext/zlib/zlib.c, Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492 )
Stdlib: header() — enum case header operand must TypeError (ext/standard/head.c, php-src-strict) #8834 — Stdlib: header() enum $header operand must TypeError (head.c)
Also filed: #8835 (sscanf/fscanf enum format operands).
Upgraded specs: #8718 (vendor bundle native rebuild audit) · #8721 (MCJIT bin/jit.php -r SIGSEGV bootstrap impact, #98 ).
Worker hint: complements enum cluster (#8746 , #8810 –#8816 ); this pass adds process-spawn + pipe operator + zlib PHP-in-PHP.
Summary
Umbrella for implementation work between today's bootstrap (M0–M4 slice) and M5: the compiler fully compiles itself without Zend in the loop.
Target doc: docs/self-host-target.md
Gates: docs/bootstrap-selfhost.md · Fast path: docs/bootstrap-m5-fast-path.md
Living roadmap: #78
Jun 2026 development focus: use fast M5 gates for daily work (make north-star5-verify-fast, VM probe ~20ms). Reserve north-star5-verify --strict (~1h) for pre-merge bootstrap/gen-0/vendor PRs only. Cursor rule: .cursor/rules/m5-fast-development.mdc.
Milestone status (Jun 2026 — maintainer probe 2026-06-05 )
Milestone
Gate
Status
Tracker
M0 minimal link
make bootstrap-selfhost-link
✅ GREEN
#2894
M2 spine / inventory
bootstrap-inventory.php --check
✅ GREEN
2643/2643 , 0 blockers
M2 VM driver execute
make bootstrap-selfhost-vm-driver-execute-probe
✅ GREEN (~20ms)
#2201
M3 HelloWorld strict
make bootstrap-selfhost-helloworld
✅ GREEN (emit_path=native)
—
M4 full ladder
make bootstrap-loop-probe
✅ GREEN
#1498
M5 vendor (committed)
prelinked/bootstrap-vendor/*.o
✅ GREEN
3/3 (#1416 )
M5 spine w/o vendor/
north-star5 step 4c
✅ GREEN
#3052
M5 gen-0 no Zend
BOOTSTRAP_M5_NO_ZEND=1
✅ GREEN
#3053
M5 vendor native rebuild
no Zend fallback
✅ GREEN
#3054
M5 presenter (daily)
make north-star5-verify-fast
✅ GREEN (branch)
this epic
Top open bootstrap gaps (Jun 2026)
#8558 — inventory emit native path
#8557 — gen-0 sidecar refresh
#8556 — MCJIT execute
#8559 — gen-0 sidecar on master after #8682
#3038 — JIT unit inventory compile_driver.php
Historical
Prior probe (May 2026): comment thread — superseded by Jun 2026 table above (#3052 /#3053 /#3054 now closed).
Parity backlog — architect run (2026-06-15)
Live Zend vs bin/vm.php reprobes. Top gaps filed/upgraded (implementation-ready):
#8725 — Enum case fetch regression (backing scalars; root cause for php-src-strict stdlib)
#8723 — serialize()/unserialize() enum wire format regression
#8724 — var_export() enum case regression
#8726 — PHP 8.4 static property union types
#8727 — php-in-php: shared NativeDlopen for compression JIT
Upgraded specs: #4470 (ReflectionClass::getProperties), #8709 (M3 phantom -o emit).
Worker order: #8725 first → unblocks enum symptom queue (#8685 –#8691 , #8723 , #8724 ). Mirror on #78 .
Wave 2 (same day — enum stdlib + bootstrap)
#8728 — math builtins enum TypeError regression (Stdlib: math builtins (ceil/round/floor/abs/…) must TypeError on enum case operands (ext/standard/math.c) #5613 )
#8729 — min()/max() enum return objects regression (Stdlib: max()/min() with enum case operands must return enum case objects (ext/standard/array.c) #5570 )
#8730 — urlencode()/rawurlencode() enum TypeError (php-src-strict)
#8731 — php-in-php: ARGON2 password_hash host delegation removal
#8732 — json_encode() property get hooks (PHP 8.4)
Also: #8733 (http_build_query() enum encoding). Upgraded bootstrap specs: #8702 , #8705 .
Wave 3 (2026-06-16 — property hooks + php-in-php FFI)
#8917 — isset() on property hooks must not invoke get hook
#8918 / #8919 — regressions: empty() / ?? on hooks (re-Language: empty() on property hooks must not invoke get hook (zend_property_hooks.c) #8901 /Language: ?? on property hooks must not invoke get hook when backing is initialized (zend_property_hooks.c) #8902 )
#8920 — php-in-php: VmFsReadNative pure file_get_contents without libc FFI
#8921 — php-in-php: VmRandomNative CSPRNG without getrandom FFI
#8922 — php-in-php: VmSleepNative sleep/usleep without libc FFI
Root still blocking enum stdlib batch: #8746 backed enum case materialization.
Expanded specs: #7026 (curl introspection), #3389 (crypt re-scoped to bcrypt/JIT/php-in-php).
Parity gaps filed (2026-06-16)
Commenting is disabled on this issue (too many comments), so this summary is appended to the body.
Top worker-ready gaps filed/updated:
Also tightened: #3438 (ext/sodium) clarified bootstrap/host-delegation constraints vs self-host (#1492 ).
Parity backlog updates
2026-06-16
Top parity gaps filed/strengthened (implementation-ready):
Note: GitHub has commenting disabled on this issue (too many comments), so updates are tracked here in the body.
Parity backlog — 2026-06-17 architect run (pass 2)
Top 5 gaps filed / upgraded (implementation-ready):
Language: BackedEnum::from()/tryFrom() — backing scalar lookup broken (Zend/zend_enum.c) #9147 (IMPORTANT , language) — BackedEnum::from()/tryFrom() throw or null on valid backing scalars (Zend/zend_enum.c).
php-in-php: JIT StringInfo — route phpversion/extension_loaded/get_loaded_extensions through VmInfo PHP not LLVM+libc (#1492) #9148 (php-in-php) — JIT StringInfo LLVM (phpversion, extension_loaded, …) → route through VmInfo PHP.
php-in-php: JIT StringRandomBytes — route random_bytes() through VmRandom PHP not /dev/urandom LLVM (#1492) #9149 (php-in-php) — JIT random_bytes /dev/urandom LLVM → VmRandomPure PHP.
php-in-php: JIT GcStatusRuntime — route gc_status() through VmGcStatus PHP not LLVM hashtable builder (#1492) #9150 (php-in-php) — JIT gc_status GcStatusRuntime LLVM → VmGcStatus PHP.
Stdlib/JIT: array_udiff/array_uintersect/array_*_u* — native JIT lowering still throws (VM interpreter fallback only) #9155 (stdlib/JIT) — array_udiff/array_uintersect/… native JIT call() (still VM-only throw; interpreter fallback only).
Upgraded specs: #3722 (Randomizer methods after closed #7102 skeleton) · #5698 (alias registration done → follow #9155 ).
Still hot: #9006 UnitEnum::cases() empty · #9068 bootstrap helloworld · regressions #9143 / #9142 / #9140 .
Parity backlog — 2026-06-17 architect run (pass 3)
Top 5 gaps filed / upgraded (implementation-ready):
Language: public private(set) combined visibility modifiers must be compile-time error (Zend/zend_compile.c) #9161 (IMPORTANT , language) — public private(set) combined visibility modifiers must be compile-time error (Zend parse fatal; VM compiles today).
Regression: openssl_random_pseudo_bytes() — $crypto_strong by-ref stays false in script context (ext/standard/random.c) #9159 (stdlib regression) — openssl_random_pseudo_bytes() $crypto_strong by-ref stays false in script/file context.
Regression: stream_wrapper_register() user wrappers — file_get_contents returns empty (userspace.c, re #3383) #9162 (stdlib regression) — user stream_wrapper_register() — file_get_contents returns empty string.
Stdlib: gc_mem_caches() — return value always 0 not bytes released (ext/standard/php_gc.c) #9160 (stdlib) — gc_mem_caches() return always 0 vs Zend 65536.
php-in-php: JIT StringUnserialize — route unserialize() through VmUnserializeFormat PHP not __compiler_unserialize LLVM (#1492) #9163 (php-in-php) — JIT unserialize() still uses __compiler_unserialize C not VmUnserializeFormat PHP.
Also filed: #9164 (php-in-php hash/hash_hmac JIT → VmHash). Expanded specs: #9067 (sprintf positional+pad compliance/JIT guard), #4688 (stream bucket API). Stale note: #9071 (array_key_first/last exist — compliance closure only).
Parity gap summary (2026-06-17)
Top implementation-ready gaps/spec upgrades filed this run:
Spec upgrades (thin→fully implementation-ready repro/commands):
Parity architect run 2026-06-19
#
Gap
#10076
array_all()/array_any() named array:/callback: rejected
#10077
array_find()/array_find_key() named params rejected
#10078
php-in-php: JIT InstanceOfHelper → VM PHP
#10079
php-in-php: JIT FiberHelper → FiberSupport PHP
#10080
php-in-php: JIT IteratorHelper → VM foreach PHP
Upgraded: #8978 tempnam() enum operands · #8980 str_rot13() enum operands.
Parity backlog — 2026-06-20 architect run (s) (this pass)
Top 5 gaps filed (implementation-ready):
??RHS) (Zend/zend_execute.c)call_user_func()string builtin callbacks fail despiteis_callable('strlen')(ext/standard/basic_functions.c)VmErrorReporterPHP not silent null (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)forward_static_call*()parent outside class scope → Error not TypeErrorclass_implements(ArrayIterator)missing SeekableIterator/ArrayAccess/SerializableThin issues expanded: #4737 (
parse_str()returnsnullnottrue+ by-ref), #4403 (FILTER_VALIDATE_IPunknown filter ID 275 dispatch).Queue health: Prior tranche #10345–#10352 (stdlib edge cases) still open; this run prioritized callable dispatch, undefined-variable warnings, and reflection/SPL interface maps.
Parity backlog — 2026-06-19 architect run 4 (this pass)
Top 5 gaps filed (implementation-ready):
|>LHS enum case materializes to backing scalar notobject(E::A)(Zend/zend_compile.c)VmGeneratorPHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)ClosureBindHandlerPHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)gc_collect_cycles()returns1on non-cyclic dtor; Zend returns0(Zend/zend_gc.c)VmPropertyHookPHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)Also filed: #10113 —
iterator_count()closed-generator Exception message mismatch (extends #5132 partial fix).Thin issues expanded: #5132 (throw now works; message gap → #10113), #3295 (full mt_rand done-when + verification matrix), #9725 (static hook dispatch green; narrow to isset/unset).
Queue health: Enum/named-arg batch (#10093–#10100) well covered; this run prioritized php-in-PHP LLVM shrink (generators, closures, property hooks) + pipe enum preservation + GC return count.
---## Parity backlog — 2026-06-19 architect run 3 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
SuperglobalRefreshRuntime~1.9k LLVM →lib/Web/Superglobals.phpPHP (CGI$_SERVERrefresh)StringPasswordCryptoJit~917 LLVM →VmPasswordPHP (password_hash/verify)final const stringPHP 8.4 parse fails (extends Language: file-scope typed constants (const string|array X) — parse fails at global/namespace scope (PHP 8.3, zend_compile.c) #7081)StringQuotPrintJit~514 LLVM →VmStringquot_print PHPStringUtf8Latin1Jit~412 LLVM →VmStringutf8_encode/decode PHPThin issues expanded: #676 (MiniWebApp AOT unskip matrix +
implementation-ready), #6317 (DOMDocumentFragmentrepro/done-when). #9677 comment: duplicate enum now silently runs (compile-time fatal missing). #8949 comment:weakmap_enum_foreach.phptstill red.Queue health: Recent enum/property-hook batch (#9830–#9894) well covered; this run prioritized php-in-PHP LLVM shrink (web CGI + stdlib MIME/password) and PHP 8.4
final constlanguage gap.Parity backlog — 2026-06-19 architect run 2 (this pass)
Top 5 gaps filed (implementation-ready):
::classstillTypeErroron int operand after Close #9811: enum case ::class pseudo-const guard tests #9827Cannot redeclare__DIR__/__FILE__MagicScriptConst` fatal in php-types TypeReconstructorisset/emptyskips get hook (false/true vs true/false)array_shift/pop/unshifton inline literal by-ref Error (Zend accepts)Also filed: #9835 readonly + property hooks compile rejected (
Hooked properties cannot be readonly).Specs upgraded: #9750 pipe operator VM partial — JIT/AOT + compliance finish; #3325 curl partial (
curl_initexists) — setopt/exec/getinfo remain; #6772 static asymmetric reflection repro table.Worker queue: enum
::classroot #9830 before leaf stdlib; property-hook compile #9831 before #9832/#9800; bootstrap #9833 unblocks__DIR__spine scripts.Parity backlog — 2026-06-19 architect run (this pass)
Top 5 gaps filed (implementation-ready):
::classpseudo-constant fatals (TypeErroron scalarized case); VM hasTYPE_ENUM_CASEpath but fetch returns intclone($obj, ['prop'])parse + selective reinit missingversion_compare()JIT still ~800-line LLVM — route throughVmInfoPHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)http_get_last_response_headers()stub never captures wrapper headers (PHP 8.4)strtok()JIT ~480-line LLVM duplicate ofVmStringPHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)Also filed: #9814 putenv/getenv LLVM overlay →
VmEnvPHP; #9815 stream fsync/fdatasync LLVM →VmPhpFdStreamPHP.Specs upgraded: #4036
get_object_vars()parent private/protected key leak (inline repro + php-src-strict done-when); #6097class_has_lazy_object_uninitializer()probe + TypeError operand table.Worker queue: enum preservation cluster (#9811, #9727, #9726, #9790) and PHP 8.4 property hooks (#9754, #9725, #9800) — one issue per run.
Parity backlog — 2026-06-18 architect run 9 (this pass)
Top 5 gaps filed (implementation-ready):
TypeError: int given); root enum object preservationE::Case->method()→Method call on non-object(re-Language: enum case instance method dispatch — E::Case->method() fatals Method call on non-object (Zend/zend_enum.c) #9658)E::A == backingloose compare still true (re-Language: loose == / != between enum case and backing scalar must be false (Zend/zend_operators.c) #9660/Language: backed enum case ==/===/<=> with scalar operands must be false — not backing coercion (zend_operators.c) #9583)public private(set)parse blocked — php-cfg overlay anchor missing (re-Bootstrap: php-cfg-asymmetric-visibility Param.php overlay anchor missing — blocks public private(set) parse (#7460) #7468)StringSimilarTextJitLLVM (~420 lines) →SimilarTextJitHelperPHPAlso filed: #9728 static-closure
bindTo/bindregression (re-#9645).Specs upgraded: #9052
ini_get_all('standard')filter gap verified; #5125locale_get_*edge-case matrix; #9093getopt()-rvs script-file argv paths.Worker queue: treat #9730 as enum-cluster root before leaf stdlib coercions (#9682–#9716).
Parity backlog — 2026-06-18 architect run 8 (this pass)
Top 5 gaps filed (implementation-ready):
Cannot use int as default value for type Econst G = E::Amaterializes backing scalar not enum case objectconst X = E::Amaterializesintnot enum case (C::X === E::Afalse)list()destructuring with enum-case array key mustTypeError: Illegal offset typeAlso filed: #9716
match()enum subject vs scalar int arms (inverse of #9566); #9717 (php-in-php) AOTCloneWithReinitRuntimeLlvmstill ~320-line LLVM — finish #9498 PHP helper path.Specs upgraded: #5695 mbstring module skeleton verification; #3741 pgsql v1
pg_connect/pg_queryslice.Worker queue: enum preservation cluster (#9682, #9685, #9702) + named-arg stdlib (#9646, #9647) remain highest-impact from prior runs.
Parity backlog — 2026-06-18 architect run 7 (this pass)
Top 5 gaps filed (implementation-ready):
match(1) { E::A => … }hits via backing coercion — Zend throwsUnhandledMatchErrorswitch(1) { case E::A: }hits — Zend printsmissE::A + 1→2— ZendTypeError(enum numeric ops)(object) E::A→ empty object — Zend returns same enum case (===true)lib/JIT/Builtin/Refcount.php~1.7k-line__ref__LLVM → VmValue PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)Specs upgraded: #3352 (grapheme umbrella VM status + repro paths), #6246 (
grapheme_str_splitVM landed; JIT/PHPT remain).Worker queue: enum identity cluster (#9566–#9569) shares compare helper with #9546; #9570 parallelizes with JIT migration batch (#9542–#9545).
Parity backlog — 2026-06-18 architect run 6 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
new— VM accepts illegal const initializer (Zend/zend_compile.c) #9517 (language) — Class constant expression must rejectnew— VM runsconst X = new C(1)(Zend/zend_compile.c)::classmust return enum name — VM TypeError on backing scalar (Zend/zend_enum.c) #9518 (language) — Enum case value::classmust return enum name — VMTypeErroron backing scalar (Zend/zend_enum.c)similar_text()mustTypeErroron int operands — VM coerces (distinct from Stdlib: str_word_count()/strrev()/chunk_split()/similar_text()/levenshtein()/substr_count() — enum case operands must TypeError (string.c) #8797 enum cases)Zend/zend_property_hooks.c)ProgressNoteRuntime/ReadonlyRaiseLLVM (~725 lines) → compiled PHP (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)Specs upgraded: #4645 (WeakMap object keys + #9194 enum cross-ref), #6451 (
ReflectionProperty::setRawValue/getRawValuefull repro).Worker queue: enum preservation regressions (#9435, #9436, #9289) remain hot; also mirrored on #9350.
Parity backlog — 2026-06-18 architect run 5 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
Errorat first use (re-Regression: duplicate backed enum values — no Error at first use (zend_enum.c, re-#5773) #8876,Zend/zend_enum.c)SessionStorageRuntime(~1.1k LLVM) →VmSessionPHP (ext/session/mod_files.c)CtypeRuntimeLLVM bridges →CtypeJitHelperPHP (pairs Regression: ctype_*() — enum case operands return true not false (re-#8962, ext/standard/ctype.c) #8995 enum operands)ObStatusRuntime→VmOutputPHP (pairs Stdlib: ob_get_status() — JIT/AOT lowering (phase 2, ext/standard/output.c) #4877ob_get_status)CloneWithReinitRuntime→CloneWithSupportPHP (Zend/zend_clone.c)Also filed: #9499
DateIntervalFormatRuntime, #9500SessionCreateIdRuntime.Specs upgraded: #6048 (PHP 8.3 date exception hierarchy repro matrix), #5965 (
request_parse_body()+RequestParseBodyExceptionmultipart repro).Worker queue: prefer #9494 (enum regression) and #9495 (largest session LLVM blob); also mirrored on #9350.
Parity backlog — 2026-06-18 architect run 4 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
constant('E::A')returns backingint(1)not enum case object (Zend/zend_enum.c; pairs Stdlib: constant() — resolve user/class constant by name (ext/standard/basic_functions.c parity) #3484)SpaceshipCompareJit(~1.2k LLVM) →CompareJitHelperPHP (anchors Regression: enum relational operators — < and <=> order inverted vs Zend (re-#9016, zend_enum.c) #9288 enum<=>order)(int)cast on enum case missingE_WARNING(Zend/zend_operators.c; pairs Stdlib: settype() on enum cases — must emit Warning before int coercion (ext/standard/type.c, php-src-strict) #8974)StreamNotificationRuntime→ext/standard/stream_notification_callback.phpPHP registryStreamPathRuntime→VmFsstream path metadata (JITfstatparity php-in-php: fstat()/stream path stat — delete __phpc_fstat from phpc_stream.c, VmStream PHP stat (pairs #5343) #6764)Also filed: #9477 —
RewriteVarsRuntime→ResponseContextPHP (web mod_rewrite vars).Specs upgraded: #9168 (fiber
start()/resume()return propagation + php-src refs; closes #9063), #4408 (hash_hmac()invalid algo →ValueErrornotfalse).Worker queue: enum preservation cluster (#9435–#9437, #9006
UnitEnum::cases()) still IMPORTANT; no overlap with #9470–#9474 (prior run).Parity backlog — 2026-06-18 architect run 3 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
foreach ($obj)on property-hook objects must invoke get hook; fatal on uninitialized typed backing (Zend/zend_property_hooks.c; pairs Stdlib: get_object_vars() — property hooks must invoke get hook (zend_property_hooks.c) #5203 get_object_vars)array_all()/array_any()unwrap enum cases to backing scalars in callbacks (instanceof E→ false; ext/standard/array.c; pairs Stdlib: array_find() callback receives backing scalar for enum case elements (must pass enum objects) #9038 / Stdlib: array_map()/array_filter() on enum arrays must preserve enum case objects (ext/standard/array.c) #5564)ErrorHandlerJitRuntime(~556 LLVM) →VmErrorHandlerPHP (set_error_handlerstack)ExceptionHandlerJitRuntime(~602 LLVM) →VmExceptionHandlerPHP (set_exception_handlerstack)GethostbyaddrRuntime(~223 glibc LLVM) →VmDnsPHP (pairs php-in-php: JIT GethostbynamelRuntime — route gethostbynamel() through VmDns PHP not glibc addrinfo LLVM (#1492) #9382 gethostbynamel)Specs upgraded: #5156 (intl error helpers — existence + forced-error repro matrix), #6188 (IntlBreakIterator family — class existence + word-break repro).
Worker queue: no overlap with in-flight regressions #9447–#9463; property-hook foreach (#9470) is language IMPORTANT-adjacent for PHP 8.4 apps.
Parity backlog — 2026-06-18 architect run 2 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
throwexpression non-throwing??branch returns empty not LHS value (Zend/zend_execute.c; pairs Language: throw as expression (?? / ?: contexts) — parse/compile/runtime parity (Zend) #9209)StringStrGetcsvJit/StringFgetcsvJit(~870 LLVM) →VmCsv/VmFsPHP (pairs Stdlib: str_getcsv()/fgetcsv() — escape=enclosure " parses quoted fields wrong (ext/standard/file.c) #9303 CSV parity)SessionLifecycleRuntime(~460 LLVM) →VmSessionPHP (session_start/destroy cluster)StringHtmlspecialchars(~420 LLVM) →VmStringPHP (pairs Stdlib: strip_tags()/htmlspecialchars() enum case operands must TypeError (ext/standard/string.c, php-src-strict) #5897 enum TypeError)StreamLifecycleJit(~395 LLVM) →VmFsPHP (is_resource/fclose/feof/fflush)Also filed: #9443 —
StringHttpBuildQueryJIT →VmHttpBuildQueryPHP (pairs #8733 enum encoding).Specs upgraded: #9209 (throw-expression umbrella + #9447 repro), #9208 (
mb_ltrim/mb_rtrimexist; blocked on #4636mb_internal_encoding), #5698 (array_* aliases now registered — close when comparator issues land).Worker queue: enum preservation cluster (#9435–#9437, #9335) still IMPORTANT; claim #9447 before #9209 umbrella close.
Parity backlog — 2026-06-18 architect run (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
Specs upgraded: #9048 (spl_autoload JIT), #9047 (stream_filter JIT) — full repro + docker-exec + done-when.
Worker queue: recent open issues are largely implementation-ready; enum instanceof #9335, bootstrap #9068 / #9252 remain IMPORTANT blockers.
2026-06-17 parity gap summary (filed this run)
Worker-ready issues filed/updated:
stream_select()parity + remove host stream delegation (php-in-php;ext/standard/streams.c)socket_atmark()hard-stubbed (ext/sockets/sockets.c)socket_import_stream()hard-stubbed (ext/sockets/sockets.c)ext/posix/posix.c)unserialize()invalid payload must return false + seterror_get_last()(ext/standard/var_unserializer.re)(Also expanded: #8685
define()enum-case arg must TypeError before coercion.)---## Parity backlog — 2026-06-17 architect run 4 (this pass)
Top gaps filed / upgraded (implementation-ready):
Compiler::compileFuncentry stub on M3 compile spine (selfhost AOT stub audit).compiler_language_warning()must work in JIT/AOT for Zend language warnings (continue targeting switch).get_headers()parity:$associativearg index + wrapper behavior; JIT/AOT currently throws.array_is_list()php-src parity with explicit docker-exec repro commands + scope.class_alias()php-src parity with corrected php-src ref + scope + commands.Parity backlog — 2026-06-17 architect run 3 (this pass)
Top 5 gaps filed (implementation-ready):
Errorstill missing (Zend/zend_enum.c, re-closed Regression: duplicate backed enum values — no Error at first use (zend_enum.c, re-#5773) #8876)get_class_methods()on backed enum case must list enum methods, not fatal (ext/standard/basic_functions.c)WeakMap::offsetSet()must accept backed enum case keys (Zend/zend_weakrefs.c)StringVarDumpJit→ routevar_dump()throughVmVarPHP not__compiler_var_dumpLLVMStringStripTagsJit→ routestrip_tags()throughVmStringPHP not LLVM tag parserAlso filed: #9197 — php-in-php:
@silence viaVmErrorHandlernot__compiler_begin/end_silenceLLVM.Upgraded specs: #9177, #9178 — vendor patch apply failures blocking
make test-fast.Queue note: Enum-case-as-scalar root (#5509, #8932) amplifies #9192/#9194. Prior run items #9185–#9191 remain parallel work.
Parity backlog — 2026-06-17 architect run 2 (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
$obj->method(...)failsparseAndCompile(Zend produces bound Closure). Builtin/static FCC largely fixed; pairs narrowed Language: first-class callable syntax — strlen(...) yields NULL not Closure (Zend/zend_compile.c) #9170.serialize()still uses LLVMStringSerializehashtable walker; route throughVmSerializePHP (pairs php-in-php: JIT StringUnserialize — route unserialize() through VmUnserializeFormat PHP not __compiler_unserialize LLVM (#1492) #9163 unserialize migration).microtime/getdate/localtime/idate) duplicatesVmDatePHP; shrinkStringMicrotime/StringGetdate/… LLVM.gc_collect_cycles()JIT usesGcCollectCyclesNative/phpc_gc.c; route throughCycleCollectorPHP (pairs php-in-php: JIT GcStatusRuntime — route gc_status() through VmGcStatus PHP not LLVM hashtable builder (#1492) #9150gc_status).json_encodeflags partial:JSON_THROW_ON_ERRORon invalid UTF-8 still missingJsonExceptionon VM.Also filed: #9182 (hrtime JIT php-in-php), #9184 (getrusage JIT php-in-php). Upgraded: #9170 (FCC default-parameter scope only; instance → #9185).
Still high-signal from prior queue: #9147 BackedEnum::from, #9063 Fibers JIT, #9076 array_multisort by-ref NULL.
Parity backlog — 2026-06-17 architect run (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
__DIR__/__FILE__Expr_MagicScriptConstfailsparseAndCompile(root cause for Regression: file_exists()/is_dir()/is_file() with inline __DIR__/__FILE__ return false (magic constant lowering) #9127 file stat magic-const scripts).sprintf/printf/number_formatlibc LLVM → route throughVmSprintfPHP.mktime/strftime/strptimelibc LLVM → route throughVmDateTimeNativePHP.preg_match/preg_replacelibpcre2 LLVM → route throughext/pcrePHP (VmPcre).UnitEnum::cases()returns empty array on VM (verified red locally).Also filed: #9133 (pack →
PackEngine), #9134 (sscanf →VmSscanf). Expanded: #9051 (ext/uriPHP 8.4 API), #9063 (Fibers rescoped — VM basic OK, JIT/FiberErrorremain).Worker hint: fix #9136 before #9127 runtime checklist; php-in-php JIT migrations (#9131–#9135) shrink LLVM link surface for self-host.## Parity backlog — 2026-06-16 architect run (this pass)
Top 5 gaps filed / upgraded (implementation-ready):
./script/docker-exec.shself-host path segfaults inscript/apply-patches.sh(blocks docker-based bootstrap probes).serialize(Closure)must throw (Zend forbids Closure serialization; VM currently allows).sprintf()missing%Fconversion specifier (VM throws, Zend prints float).JitStringSearch::find()unimplemented; impactsstripos/strripos).Closure::fromCallable([E::A,'m'])andarray_find()callback value passing.Worker hint: #9040 is the immediate unblocker to restore the recommended docker wrapper workflows for #1492.
Top gaps filed / upgraded (this run — array by-ref bugs + bootstrap spec):
array_multisort()clobbers array args toNULL(variadic by-ref semantics; non-enum repro).usort()/uasort()/uksort()clobber array arg toNULL(by-ref + callback; non-enum repro).array_walk()clobbers array arg toNULL(by-ref arg semantics; non-enum repro).implementation-ready:make bootstrap-selfhost-helloworldfails (Unknown type encountered).implementation-ready: release readiness spine coverage gate fails (exit 255).Worker hint: the array by-ref clobber bugs are high-impact stdlib correctness gaps (independent of enum materialization issues #8881/#8867/#5567).
Parity backlog — 2026-06-16 architect run (latest)
Top 5 gaps filed (this pass):
WeakMapenum case object keys — VMTypeErrornot Zend object key (re-Language: WeakMap enum case object keys — VM fatal, Zend accepts (Zend/zend_weakrefs.c) #8949,zend_weakrefs.c)ctype_*()enum operands returntruenotfalse(re-Stdlib: ctype_*() — enum case operands must return false not coerce backing string (ext/standard/ctype.c) #8962,ext/standard/ctype.c)strncmp()/strncasecmp()enum operands mustTypeError(ext/standard/string.c)htmlspecialchars/htmlentities/urldecode/rawurldecode/mb_convert_encodingenum operands (string.c,mbstring.c)__compiler_touch/__compiler_tempnam/__compiler_mkdir— route through VmFs PHP, drop libc LLVM helpers (Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)Also filed: #8998 (
preg_quote()enum operand).Upgraded specs: #3202 (fsockopen partial — VM registered, JIT/AOT + #8953 FFI remain) · #5221 (
ReflectionClass::isReadOnly()verified repro table).Worker hint: complements enum-coercion cluster; this pass adds closed-issue regressions (WeakMap/ctype), strncmp/HTML-URL-mb enum guards, and JIT filesystem libc shrink.
Parity backlog — 2026-06-15 architect run
Top 5 gaps filed (this pass):
random_bytes()enum$lengthcoerces notTypeError(re-Stdlib: random_bytes() — enum case length operand must TypeError not silent coerce (php-src-strict) #6160,random.c)proc_open/shell_exec/passthru/system/execenum command operands (proc_open.c,exec.c)|>parse + compile (zend_language_parser.y)VmZlibNative→ pure PHP zlib, drop libz FFI (ext/zlib/zlib.c, Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492)header()enum$headeroperand mustTypeError(head.c)Also filed: #8835 (
sscanf/fscanfenum format operands).Upgraded specs: #8718 (vendor bundle native rebuild audit) · #8721 (MCJIT
bin/jit.php -rSIGSEGV bootstrap impact, #98).Worker hint: complements enum cluster (#8746, #8810–#8816); this pass adds process-spawn + pipe operator + zlib PHP-in-PHP.
Summary
Umbrella for implementation work between today's bootstrap (M0–M4 slice) and M5: the compiler fully compiles itself without Zend in the loop.
Target doc:
docs/self-host-target.mdGates:
docs/bootstrap-selfhost.md· Fast path:docs/bootstrap-m5-fast-path.mdLiving roadmap: #78
Milestone status (Jun 2026 — maintainer probe 2026-06-05)
make bootstrap-selfhost-linkbootstrap-inventory.php --checkmake bootstrap-selfhost-vm-driver-execute-probemake bootstrap-selfhost-helloworldemit_path=native)make bootstrap-loop-probeprelinked/bootstrap-vendor/*.oBOOTSTRAP_M5_NO_ZEND=1make north-star5-verify-fastTop open bootstrap gaps (Jun 2026)
masterafter #8682compile_driver.phpHistorical
Prior probe (May 2026): comment thread — superseded by Jun 2026 table above (#3052/#3053/#3054 now closed).
Parity backlog — architect run (2026-06-15)
Live Zend vs
bin/vm.phpreprobes. Top gaps filed/upgraded (implementation-ready):serialize()/unserialize()enum wire format regressionvar_export()enum case regressionUpgraded specs: #4470 (ReflectionClass::getProperties), #8709 (M3 phantom
-oemit).Worker order: #8725 first → unblocks enum symptom queue (#8685–#8691, #8723, #8724). Mirror on #78.
Wave 2 (same day — enum stdlib + bootstrap)
TypeErrorregression (Stdlib: math builtins (ceil/round/floor/abs/…) must TypeError on enum case operands (ext/standard/math.c) #5613)min()/max()enum return objects regression (Stdlib: max()/min() with enum case operands must return enum case objects (ext/standard/array.c) #5570)urlencode()/rawurlencode()enumTypeError(php-src-strict)password_hashhost delegation removaljson_encode()property get hooks (PHP 8.4)Also: #8733 (
http_build_query()enum encoding). Upgraded bootstrap specs: #8702, #8705.Wave 3 (2026-06-16 — property hooks + php-in-php FFI)
isset()on property hooks must not invoke get hookempty()/??on hooks (re-Language: empty() on property hooks must not invoke get hook (zend_property_hooks.c) #8901/Language: ?? on property hooks must not invoke get hook when backing is initialized (zend_property_hooks.c) #8902)VmFsReadNativepurefile_get_contentswithout libc FFIVmRandomNativeCSPRNG without getrandom FFIVmSleepNativesleep/usleep without libc FFIRoot still blocking enum stdlib batch: #8746 backed enum case materialization.
Expanded specs: #7026 (curl introspection), #3389 (crypt re-scoped to bcrypt/JIT/php-in-php).
Parity gaps filed (2026-06-16)
Commenting is disabled on this issue (too many comments), so this summary is appended to the body.
Top worker-ready gaps filed/updated:
declare(strict_types=1)scalar arg coercion /TypeErrorparity (caller-controls-strictness)extension_loaded()/get_extension_funcs()/phpversion($ext)— extension registry parity (pairs Stdlib: get_loaded_extensions() — full module registry parity (phase 2 of #3204) #4839)ini_get_all()return shape + per-extension filtering parityext/urimodule/API missing (php-srcext/uriparity)ext/soapSoapClientsubset spec tightened to require no-network local WSDL fixturesAlso tightened: #3438 (
ext/sodium) clarified bootstrap/host-delegation constraints vs self-host (#1492).Parity backlog updates
2026-06-16
Top parity gaps filed/strengthened (implementation-ready):
Fiber/FiberError, suspend/resume state machine) — Zend ref:Zend/zend_fibers.cZend/zend_compile.c,Zend/zend_object_handlers.cgetopt()missing — php-src refs:ext/standard/php_getopt.c,ext/standard/basic_functions.carray_is_list()missing — php-src ref:ext/standard/array.cNote: GitHub has commenting disabled on this issue (too many comments), so updates are tracked here in the body.
Parity backlog — 2026-06-17 architect run (pass 2)
Top 5 gaps filed / upgraded (implementation-ready):
Upgraded specs: #3722 (Randomizer methods after closed #7102 skeleton) · #5698 (alias registration done → follow #9155).
Still hot: #9006 UnitEnum::cases() empty · #9068 bootstrap helloworld · regressions #9143 / #9142 / #9140.
Parity backlog — 2026-06-17 architect run (pass 3)
Top 5 gaps filed / upgraded (implementation-ready):
public private(set)combined visibility modifiers must be compile-time error (Zend parse fatal; VM compiles today).openssl_random_pseudo_bytes()$crypto_strongby-ref stays false in script/file context.stream_wrapper_register()—file_get_contentsreturns empty string.gc_mem_caches()return always0vs Zend65536.unserialize()still uses__compiler_unserializeC notVmUnserializeFormatPHP.Also filed: #9164 (php-in-php hash/hash_hmac JIT → VmHash). Expanded specs: #9067 (sprintf positional+pad compliance/JIT guard), #4688 (stream bucket API). Stale note: #9071 (array_key_first/last exist — compliance closure only).
Parity gap summary (2026-06-17)
Top implementation-ready gaps/spec upgrades filed this run:
throwas expression (??/?:contexts) parse/compile/runtime parity (php-src:Zend/zend_language_parser.y,Zend/zend_compile.c).mb_ltrim()/mb_rtrim()PHP 8.4 multibyte trim variants missing/parity (php-src:ext/mbstring/mbstring.c,ext/mbstring/mbstring.stub.php).strtok()stateful tokenizer semantics + arg handling parity (php-src:ext/standard/string.c).Spec upgrades (thin→fully implementation-ready repro/commands):
array_key_first()/array_key_last()repro + TypeError case + docker-exec command.preg_replace_callback_array()repro + TypeError case + docker-exec command.Parity architect run 2026-06-19
array_all()/array_any()namedarray:/callback:rejectedarray_find()/array_find_key()named params rejectedInstanceOfHelper→ VM PHPFiberHelper→FiberSupportPHPIteratorHelper→ VM foreach PHPUpgraded: #8978
tempnam()enum operands · #8980str_rot13()enum operands.