v0.9.0
What's Changed
- [Core] Breaking: Renamed the process API to use consistent worker terminology:
Processis nowWorkerInterface,WorkerProcessis nowSupervisedWorker, andExternalProcessis nowExecutableWorker. - [Core] Breaking: Removed
getPid()andgetLogger()fromWorkerInterfaceand addedgetId(). - [Core] Breaking: Reorganized code structure to clarify public and internal namespaces.
- [Core] Breaking: Refactored the console command API.
- [Core] Breaking: Replaced the plugin
handleWorker()method withregisterWorker()andunregisterWorker()and changedPlugin::onStop()to returnvoid. - [Core] Breaking: Removed the aggregate
SupervisorStatusandConnectionsStatusAPIs in favor ofGetWorkersCommand,GetProcessesCommand, andGetNetworkInfoCommand. - [Core] Added dynamic worker registration and removal through
WorkerFactory,StartWorkerCommand, andStopWorkerCommand. - [Core] Secured the Unix-socket message bus with peer credentials, caller context, source authorization, restricted deserialization, payload limits, connection limits, and protocol handshakes.
- [Core] Reworked message-bus transport with persistent sequential connections, asynchronous handling, and a larger backlog.
- [Core] Improved supervisor scalability with batched worker spawning.
- [Core] Added parent-death signaling on Linux and FreeBSD so workers terminate when the master process unexpectedly exits.
- [Core] Improved process identity switching with numeric UID/GID support, effective-ID checks, clearer errors, and prevention of worker startup after failed identity changes.
- [Core] Improved plugin startup, shutdown, and failure handling, including correct startup ordering.
- [Core] Daemon startup now waits for master initialization acknowledgement and correctly reports startup failures.
- [Core] Redirected standard input, output, and error streams to
/dev/nullafter daemonization. - [Core] Added the
aboutcommand. - [Core] Replaced the
workersandprocessescommands with a unifiedsupervisorcommand. - [Core] Redesigned console and log output.
- [Core] Added worker names, process uptime, connection age, and correct IPv6 formatting to status command output.
- [Core] Optimized network traffic tracking by batching deltas.
- [Core] Improved supervisor reporting for failed forks, non-zero exits, and signal-based worker termination.
- [Core] Breaking: FFI is now required.
- [FileMonitor] Breaking: Replaced
WatchDirwith absolute glob-basedWatchRuleconfiguration, including globstar patterns. - [FileMonitor] Added native FFI-based inotify watchers on Linux and FSEvents watchers on macOS, with polling fallback.
- [FileMonitor] Improved recursive monitoring for newly created, moved, replaced, removed, and symlinked directory trees.
- [HttpServer] Breaking: Renamed
HttpServerProcesstoHttpServerWorker,serverDirtodocumentRoot, andhttp2Enabletohttp2Enabled. - [HttpServer] Fixed max-request dispersion so each worker receives its own randomized reload threshold.
- [HttpServer] Added immediate validation when gzip compression is enabled without the zlib extension.
- [HttpServer] Fixed static file serving when documentRoot is relative, symlinked, or contains a trailing slash.
- [Logger] Exposed
LogEntryandContextFlattenNormalizeras public APIs for custom handlers and formatters. - [Logger] Improved context normalization with depth limits and safe handling of objects.
- [Logger] Preserved microsecond precision in worker log timestamps.
- [Logger] Fixed worker log loss during channel cloning, lifecycle shutdown, and event-loop driver replacement.
- [Metrics] Fixed summary registration so configured quantiles are passed correctly to the Prometheus client.
- [Metrics] Breaking: Standardized built-in metric names, labels, and help descriptions.
- [Metrics] Updated supervisor and scheduler gauges from live worker-pool state, including dynamically registered and removed workers.
- [Metrics] Breaking: Renamed
LabelsNotMatchExceptiontoLabelMismatchException. - [Scheduler] Breaking: Renamed
PeriodicProcesstoScheduledWorkerandPeriodicalTriggertoPeriodicTrigger. - [Scheduler] Breaking: Removed
SchedulerStatus,PeriodicWorkerInfo,GetSchedulerStatusCommand, andProcessScheduledEventin favor ofGetWorkersCommandandWorkerInfo. - [Scheduler] Added dynamic scheduled-worker registration and removal through the
WorkerFactoryAPI. - [Scheduler] Improved the
schedulercommand with live task state and timezone-aware next-run timestamps. - [Scheduler] Invalid schedule expressions now fail during configuration instead of being logged and silently skipped during startup.
- [Scheduler] Improved cron-expression detection, including named weekdays, named months, and predefined expressions such as
@daily. - [Scheduler] Improved scheduling precision with fractional-second delays and automatic removal of completed one-shot workers.
- [Scheduler] Scheduler shutdown now respects the server stop timeout and forcefully terminates tasks that do not finish in time.
- [Scheduler] Improved scheduler reporting for failed forks, non-zero exits, and signal-based task termination.
- [Symfony] Breaking: Renamed
SymfonyHttpServerProcesstoSymfonyHttpServerWorker,SymfonyWorkerProcesstoSymfonySupervisedCommandWorker, andSymfonyPeriodicProcesstoSymfonyScheduledCommandWorker. - [Symfony] Breaking: Replaced
ProcessStartEvent,ProcessStopEvent, andProcessReloadEventwithWorkerStartEvent,WorkerStopEvent, andWorkerReloadEventin theSymfonyEventnamespace. - [Symfony] Breaking: Renamed the runtime
http2_enableoption tohttp2_enabled. - [Symfony] Breaking: Renamed Symfony command-worker properties:
commandtocommandInputandcommandWithoutArgumentstocommandName. - [Symfony] Fixed retention of multipart upload streams and temporary files after completed requests.
- [Symfony] Moved HTTP conversion, multipart, upload, and Monolog implementation classes into internal namespaces.
- [Other] Updated comments, corrected grammar, and standardized variable and class names across the codebase.
Full Changelog: v0.8.2...v0.9.0