Skip to content

chore(deps): require stable z-engine releases instead of dev branches - #14

Merged
lisachenko merged 1 commit into
masterfrom
claude/z-engine-stable-updates-00g5v4
Aug 19, 2026
Merged

chore(deps): require stable z-engine releases instead of dev branches#14
lisachenko merged 1 commit into
masterfrom
claude/z-engine-stable-updates-00g5v4

Conversation

@lisachenko

Copy link
Copy Markdown
Owner

What

z-engine now ships stable tags for both supported PHP minors — 8.4.2 on the 8.4 line and 8.5.0 on the 8.5 line — so this package no longer has to consume development branches.

  • "lisachenko/z-engine": "8.4.x-dev || 8.5.x-dev""~8.4.2 || ~8.5.0"
  • root "minimum-stability": "dev" / "prefer-stable": true dropped

Why the tilde and not a caret

One z-engine release line per supported PHP minor: ~8.4.2 admits patch releases inside the 8.4 line but never the 8.5 line, and ~8.5.0 does the same for 8.5. A caret would span both lines and any future one, so a z-engine built for PHP 8.6 could be installed here before this package claims to support 8.6.

Resolution stays automatic: each z-engine tag declares its own platform requirement (~8.4.0 for 8.4.x, ~8.5.0 for 8.5.x), so only one line can satisfy a given runtime, and Core::init() still enforces the exact match at boot.

Dropping the stability pair matters more here than elsewhere — this package is tagged, so a consumer installing lisachenko/immutable-object no longer inherits minimum-stability: dev through its dependency tree.

Side effect worth noting: the CI lowest leg now resolves real tags (8.4.2 on PHP 8.4, 8.5.0 on PHP 8.5) instead of a branch tip, so the floor it tests is a version that actually exists and stays fixed between runs.

Testing

PHP z-engine resolved Result
8.4.19 8.4.2 8/8 .phpt pass
8.5.9 8.5.0 8/8 .phpt pass

Note: PHPUnit could not be installed in the environment this was prepared in (egress is restricted to the lisachenko/* repositories, so Packagist dist archives for dev dependencies are unreachable). The .phpt files were executed by a runner that reproduces what PhptTestCase does — child process per file, display_errors=1, exact --EXPECT-- comparison, unanchored --EXPECTREGEX-- match. CI runs the real vendor/bin/phpunit on both minors.

Unrelated finding while verifying (no action in this PR)

On a build with opcache.enable_cli=1, the whole immutability guarantee silently disappears on PHP 8.5: ImmutableHandler::install() hooks ImmutableInterface via setInterfaceGetsImplementedHandler(), and with opcache warm the implementor is linked without that handler running, so setWritePropertyHandler() is never installed and $object->publicProperty = 42 just succeeds — no exception, no warning.

Reproduced against both 8.5.x-dev and 8.5.0 (identical commits), so it predates this change and is not caused by it. It disappears entirely with -d opcache.enable_cli=0, which is how CI runs and how the tests above were run. The sibling packages document the same property from the other direction ("op_arrays compiled before the hook existed are served as-is until invalidated"), but here the failure mode is silent rather than merely inert, which seems worth an issue of its own — happy to open one with the minimal reproducer if useful.


Generated by Claude Code

z-engine now ships stable tags for both supported PHP minors (8.4.2 on the
8.4 line, 8.5.0 on the 8.5 line), so the development-branch constraint is no
longer needed.

- require "lisachenko/z-engine": "~8.4.2 || ~8.5.0" — one stable release line
  per supported PHP minor. The tilde admits patch releases inside a line but
  never the next minor line, which would be built for a PHP this package does
  not claim to support; each z-engine tag also declares its own ~8.4.0/~8.5.0
  platform requirement, so only one line can ever satisfy a given runtime.
- drop the root "minimum-stability": "dev" / "prefer-stable": true pair —
  nothing in require is a development branch any more, so installing this
  package no longer forces development stability on a consumer's project.
- README: describe the resolved z-engine line as a release line.

The CI "lowest" leg now resolves real tags (8.4.2 / 8.5.0) rather than a
branch tip, so the floor it tests is a version that actually exists.

Verified on both minors: PHP 8.4.19 resolves z-engine 8.4.2 and PHP 8.5.9
resolves 8.5.0, 8/8 .phpt tests pass on each.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013foRd1XwLwqjUSkSWeWrMe
@lisachenko
lisachenko marked this pull request as ready for review August 19, 2026 05:14
@lisachenko
lisachenko merged commit c7dacc3 into master Aug 19, 2026
5 checks passed
@lisachenko
lisachenko deleted the claude/z-engine-stable-updates-00g5v4 branch August 19, 2026 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant