Correction to the original report: I first claimed Packagist does not publish 8.4.x-dev. That was wrong — my parsing of the Packagist metadata crashed partway and I drew a conclusion from a truncated listing. Packagist does publish 8.4.x-dev at ref c54079c (branch 8.4 HEAD, which contains #138), and it resolves fine:
$ composer update --dry-run # on PHP 8.4
- Locking lisachenko/z-engine (8.4.x-dev c54079c)
So there is no blocker here, and downstream lisachenko/zdebug is not blocked by this repo. Sorry for the noise. The request below is what actually remains, at much lower priority.
What remains: the 8.4 line has no tag containing the debugger primitives
The newest tag on the 8.4 line is 8.4.0, which predates #138:
$ git show 8.4.0:src/System/ExecutionData.php | grep -c getLocalVariables
0
$ git log --oneline 8.4.0..origin/8.4 | head -5
c54079c Merge pull request #138 from lisachenko/claude/xdebug-z-engine-php-heop18
2012702 docs: self-debugging feasibility research (Xdebug equivalent in pure PHP)
bcb8cfe fix(system): guard ExecutionData::getSymbolTable() with the call_info flag
3f9786a feat(system): engine error and VM interrupt hooks for debugger tooling
7a58c2b feat(reflection): named local variable access for stack frames
APIs added in #138 that are only reachable from the branch, not from any tag:
ExecutionData::getLocalVariables() / getLocalVariable()
FunctionLikeTrait::getVariableNames()
ExecutionData::getSymbolTable() — nullable, ZEND_CALL_HAS_SYMBOL_TABLE-guarded (previously a segfault)
Core::setErrorCallbackHandler() / ErrorCallbackHook
Core::setInterruptHandler() / InterruptHook + Executor::requestInterrupt()
Why it matters
Consumers that prefer stable tags cannot get these APIs. For example the sibling project php-shared-data-extension uses:
"lisachenko/z-engine": "dev-master || ^8.4"
On a PHP 8.4 runner that resolves to the tag 8.4.0, because dev-master requires ~8.5.0 and is excluded — i.e. tag-based consumers on 8.4 silently sit on a pre-#138 z-engine.
Requested
Cut a 8.4.1 tag from branch 8.4 (currently c54079c) so the 8.4 line has a release carrying the #138 primitives. Purely a convenience for tag-based consumers; branch-tracking consumers (8.4.x-dev) are already fine.
Correction to the original report: I first claimed Packagist does not publish
8.4.x-dev. That was wrong — my parsing of the Packagist metadata crashed partway and I drew a conclusion from a truncated listing. Packagist does publish8.4.x-devat refc54079c(branch8.4HEAD, which contains #138), and it resolves fine:So there is no blocker here, and downstream
lisachenko/zdebugis not blocked by this repo. Sorry for the noise. The request below is what actually remains, at much lower priority.What remains: the 8.4 line has no tag containing the debugger primitives
The newest tag on the 8.4 line is
8.4.0, which predates #138:APIs added in #138 that are only reachable from the branch, not from any tag:
ExecutionData::getLocalVariables()/getLocalVariable()FunctionLikeTrait::getVariableNames()ExecutionData::getSymbolTable()— nullable,ZEND_CALL_HAS_SYMBOL_TABLE-guarded (previously a segfault)Core::setErrorCallbackHandler()/ErrorCallbackHookCore::setInterruptHandler()/InterruptHook+Executor::requestInterrupt()Why it matters
Consumers that prefer stable tags cannot get these APIs. For example the sibling project
php-shared-data-extensionuses:On a PHP 8.4 runner that resolves to the tag
8.4.0, becausedev-masterrequires~8.5.0and is excluded — i.e. tag-based consumers on 8.4 silently sit on a pre-#138 z-engine.Requested
Cut a
8.4.1tag from branch8.4(currentlyc54079c) so the 8.4 line has a release carrying the #138 primitives. Purely a convenience for tag-based consumers; branch-tracking consumers (8.4.x-dev) are already fine.