Skip to content

Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492

Description

@PurHur

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):

  1. 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)
  2. 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)
  3. 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)
  4. 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
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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
  5. 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):

  1. 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
  2. Language: property hook + private backing field — compile Cannot redeclare (Zend/zend_compile.c) #9831 (language, IMPORTANT) — property hook + private backing field compile Cannot redeclare
  3. Bootstrap: __DIR__/__FILE__ MagicScriptConst — TypeReconstructor fatal blocks compile (php-types, Zend magic constants) #9833 (bootstrap, IMPORTANT) — __DIR__/__FILE__ MagicScriptConst` fatal in php-types TypeReconstructor
  4. 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)
  5. 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):

  1. 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
  2. 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
  3. 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)
  4. 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)
  5. 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):

  1. 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
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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
  2. 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
  3. 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)
  4. 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
  5. 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):

  1. 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
  2. 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
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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
  4. 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
  5. 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):

  1. 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).
  2. 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).
  3. 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.
  4. 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.
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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
  5. 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):

  1. 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.
  2. 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).
  3. 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.
  4. 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).
  5. 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):

  1. 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).
  2. 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.
  3. 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.
  4. 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).
  5. 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):

  1. 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).
  2. 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).
  3. Stdlib: sprintf() missing %F conversion specifier (should match Zend) #9043 — stdlib parity: sprintf() missing %F conversion specifier (VM throws, Zend prints float).
  4. 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).
  5. 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):

  1. 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).
  2. 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).
  3. 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).
  4. 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).
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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)

  1. #8558 — inventory emit native path
  2. #8557 — gen-0 sidecar refresh
  3. #8556 — MCJIT execute
  4. #8559 — gen-0 sidecar on master after #8682
  5. #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):

  1. #8725 — Enum case fetch regression (backing scalars; root cause for php-src-strict stdlib)
  2. #8723 — serialize()/unserialize() enum wire format regression
  3. #8724 — var_export() enum case regression
  4. #8726 — PHP 8.4 static property union types
  5. #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)

  1. #8728 — math builtins enum TypeError regression (Stdlib: math builtins (ceil/round/floor/abs/…) must TypeError on enum case operands (ext/standard/math.c) #5613)
  2. #8729 — min()/max() enum return objects regression (Stdlib: max()/min() with enum case operands must return enum case objects (ext/standard/array.c) #5570)
  3. #8730 — urlencode()/rawurlencode() enum TypeError (php-src-strict)
  4. #8731 — php-in-php: ARGON2 password_hash host delegation removal
  5. #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)

  1. #8917 — isset() on property hooks must not invoke get hook
  2. #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)
  3. #8920 — php-in-php: VmFsReadNative pure file_get_contents without libc FFI
  4. #8921 — php-in-php: VmRandomNative CSPRNG without getrandom FFI
  5. #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):

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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):

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-0:FoundationPhase 0 – foundation & DevEx

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions