You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[0.21.0] - 2026-05-29
Security
Validate kernel_class in PHAR stub generation — reject invalid PHP class names to prevent code injection (#263)
Validate PHAR alias before stub generation — reject filenames with dangerous characters that could alter generated stub code (#259)
Restrict runtime directory creation to explicit 0700 mode — prevents other users on multi-user systems from reading PID/status files (#270, #274, #453)
Performance
Pre-compose middleware pipeline once at startup instead of rebuilding on every request (#266)
Extract magic timeout numbers into named constants in ServerManager — replaces opaque formula comment (#295)
Extract shared RecursiveDirectoryIterator setup into a single method — removes duplicated boilerplate in Polling/Inotify watchers (#285)
Extract shared AbstractErrorListener and AbstractHandler base classes — eliminates near-identical code in Task/Process error listeners and handlers (#278, #275)
Extract configureHandler() from ServerWorker::onWorkerStart() — reduces closure complexity
Fixed
Fix StaticFilesMiddleware to work with phar:// stream wrappers — realpath() returns false for phar:// paths, making the middleware unusable when running as PHAR/standalone binary (#447)
Fix README.md RebootStrategyInterface example — wrong FQCN caused copy-paste to fail (#289)
Add ext-zip and ext-inotify to CI, fix test assertions for missing extensions
Fix PHPStan type annotations in test helpers
Tests
Add end-to-end tests for Runner::run() covering all decomposed entry points and process lifecycle (#260)
Cover full ServerManager public surface with integration tests (#264)
Invoke HttpRequestHandler in test instead of only testing construction and inheritance (#253)
Add tests for AsProcess and AsTask attributes covering all configuration options (#247)
Verify gc_collect_cycles() is actually invoked in MemoryRebootStrategy (#271)
Docs
Add troubleshooting guide for long-running worker semantics — covers common pitfalls with stateful services, memory leaks, connection reuse (#283)
Resolve @internal vs public-API contradiction in Utils class — Utils::reload() is now explicitly documented as a public API for programmatic graceful worker reload (#290)
Disambiguate bin/console in README — clarify it refers to the application's console, not the bundle's bin/ directory; add bin/README.md (#282)
Exclude docs/superpowers/ planning artifacts from Composer package export (#298)
Expand composer.json keywords and description for Packagist discoverability (#299)