Release Notes
Support Policy
Sukarix is currently supported for PHP 8.4+.
Released versions
v0.4.0
🚀 Features & Improvements
- Version Number: 0.4.0
- Release Date: 2026-08-16
- General Overview: Adds a Redis-backed queue service for pipeline workloads, a
HasQueuebehaviour to consume it, and optional coloured console logging. The release is additive — no existing API changed, so upgrading from v0.3.2 requires no application changes.
Changes
- Queue Service (
sukarix): NewSukarix\Queuenamespace providingQueueService, a Redis-backed FIFO queue for passing work between pipeline stages. It adds membership-based deduplication (pushing an already-queued payload is a no-op) and per-item attempt counters on top of a Redis list. Enqueue and dequeue are executed as Redis Lua scripts, so a worker terminated mid-operation can never leave the list and the membership set disagreeing — an item is either fully queued and tracked, or neither. The queue counts attempts but intentionally owns no retry policy: deciding when a failing item is retried or parked stays with the application. See Queues. - Queue Logging (
sukarix): NewQueueProgressLoggeremitting structured queue events (start, progress, completion, throughput, batch progress, per-item add/remove, warnings and errors) with a machine-parsable context array. Item previews are generic by design — an array is reported asarray[3], never with its values — so payload contents never leak into logs. Applications can route queue telemetry elsewhere by registering a subclass under thequeue.progress_loggerInjector alias; a service that does not extendQueueProgressLoggeris rejected with an\UnexpectedValueException. - HasQueue Behaviour (
sukarix): New behaviour trait exposing the resolved queue service as a typed$queueServiceproperty. Resolution is strict by design: constructing a consumer without a registeredqueueservice throws a\LogicExceptionnaming the class, and a service that does not extendQueueServiceis rejected with an\UnexpectedValueException. This surfaces a misconfiguration at boot rather than at the first queue call, where a null member access would point at the wrong place. - Console Logging (
sukarix):LogWritergained an optional standard-output handler enabled withlog.console = true, intended for CLI applications. Whenbramus/monolog-colored-line-formatteris installed the output is coloured per level, otherwise a plain stream is used. The file handler remains active, so console output is added rather than substituted. See Logging. - Redis Connection Timeout (
sukarix): The queue honoursredis.timeout(default 2 seconds) and throws\RedisExceptionwhen the connection cannot be established, so a misconfigured worker fails immediately instead of part-way through a run. - Documentation: Added a Queues page. Rewrote the Behaviours page to list every available trait with the property it injects and its visibility, documenting that
HasAccessandHasEventsexpose aprivateproperty that subclasses cannot read. Corrected its example, which called a non-existent$this->log->write()instead of the$this->loggerMonolog instance theLogWritertrait actually provides. Expanded Logging with the logger API,log.leveland the newlog.consolesetting. Added Queues to the feature list.
v0.3.2
🐛 Bug Fixes
- Version Number: 0.3.2
- Release Date: 2026-08-04
- General Overview: Bug-fix release addressing cache, JSON encoding, and documentation accuracy issues found via static analysis.
Changes
- HasCache::remember() (
sukarix):Cache::get()returnsfalseboth on a cache miss and when the stored value is legitimatelyfalse, soremember()could never recognise a cached falsy value as a hit and recomputed it on every call. Switched toCache::exists()to distinguish a real hit from a miss. The accompanyingResponseTestwas rewritten to exercise the trait directly (the previous test asserted hardcoded literals against themselves) and a regression test for the falsy-value case was added. - Model::__construct() PHPDoc (
sukarix): Corrected the@paramtags, which inaccurately claimed$db,$tableand$fluidmust always benull. They mirror Cortex’s constructor and acceptobject,stringandboolrespectively; the wrong annotations caused PHPStan to flag the subsequent null-check as dead code. - TestScenario::postJsonData() (
statera): The method declared astringreturn type butjson_encode()can returnfalseon failure, which understrict_typeswould throw aTypeErrorinstead of a clear JSON error. Now passesJSON_THROW_ON_ERROR, matching the convention already used elsewhere in the class. - TestScenario::run() cleanup (
statera): Removed an orphaned@var CodeCoverage $coveragedocblock and its accompanyingusestatement left over from a prior refactor; they no longer corresponded to any variable in the method.
v0.3.1
🚀 Features & Improvements
- Version Number: 0.3.1
- Release Date: 2026-07-18
- General Overview: Statera migration, trait initialization refactor, cursor-based pagination, cache helpers, and open-source readiness.
Changes
- PHPUnit Removal: Dropped
phpunit/phpunitandphpunit/php-code-coveragefromrequire-devand removedphpunit.xml.dist. The framework’sInjectorTestwas converted from a PHPUnitTestCaseto a StateraTestScenariousingexpect()assertions. Code coverage is now provided transitively by Statera’s ownphpunit/php-code-coveragedependency. - Statera Dependency: Added
sukarix/stateratorequire-devso the framework uses its own testing kit for its test suite. Statera remains an optional, standalone package for applications. - Test Runner: Added
tools/statera.phpand test infrastructure (tests/src/Test/,tests/src/Suite/) to run the framework’s tests via Statera. - Statera Package: Declared the previously-undeclared
sukarix/sukarixruntime dependency insukarix/statera’scomposer.json(Statera usesSukarix\Utils\CliUtilsandSukarix\Utils\Time). - Trait Initialization: Moved
Processor::initialize()fromTailored::instance()to class constructors. EachTailoredsubclass must now callProcessor::instance()->initialize($this)in its constructor. TheHelperbase class does this automatically. - LogWriter: Added
initLogger()backward-compatible alias forinitLogWriter(). - TestCase: Removed
finalkeyword to allow subclassing in application test suites. - Action: Added
Processorimport. Made$view,$argv,$headerAuthorization, and$templatesDirnullable to prevent uninitialized typed property errors. - MailSender:
smtpSend()andgenerateId()changed fromprivatetoprotectedfor extensibility. - Assets: Constructor now calls
parent::__construct()for proper trait initialization. - TestScenario:
loadResult()handles missing template files gracefully. - Cursor Pagination: Added
Response::cursor()for cursor-based API pagination — stable under concurrent inserts, efficient on large datasets. Returns{ field, limit, has_more, next }structure. - Cache Remember: Added
HasCache::remember()for get-or-set cache pattern andHasCache::forget()for invalidation. - Paginate Fix:
Response::paginate()now castspagestoint(wasfloatfromceil()). - Open Source: Added
AGENTS.mdwith contribution guidelines and AI usage transparency across all repositories.
v0.2.0
🚀 Features
- Version Number: 0.2.0
- Release Date: 2025-01-20
- General Overview: Added CSRF protection, enhanced session management, and improved validation.
v0.1.0
🚀 Introduction
- Version Number: 0.1.0
- Release Date: 2024-06-14
- General Overview: First version of the Sukarix Framework.