CPalius CMF 2.2.18
Released: 2026-09-25 · Channel: stable · Critical: yes
2.2.11 through 2.2.16 chased a crash caused by the compiled container being cleared and rebuilt unsafely, all inside CoreUpdater/CacheRebuildManager's update pipeline. This release fixes the same class of bug in a place none of those releases ever touched: deleting or deactivating a module from AACP's own module-management screen.
What was actually wrong
ModuleActivator::clearCache() never used CacheRebuildManager. It hand-rolled its own synchronous bin/console cache:clear --no-warmup subprocess and deliberately left the container unbuilt afterward, on the reasoning that "the next real request warms it lazily, off the critical path." That next request was never a random visitor — activating, deactivating, and deleting a module all redirect straight back into AACP, so it was always this same admin's own next click that was guaranteed to pay for an inline container compile squeezed into one HTTP request's time and memory budget, the exact failure mode CacheRebuildManager exists to prevent.
Deleting a module made it worse in its own way: the module's files were removed from disk immediately, synchronously, before any cache clearing happened at all. The container still being served at that moment — compiled while the module's files still existed — has that module's template directory baked into its Twig loader as a literal path string. Twig validates that a path exists every time its loader is built, not only at compile time, so every single request in the gap between "files gone" and "container rebuilt" threw Twig\Error\LoaderError, not just an unlucky one that happened to land mid-race.
What's fixed
ModuleActivator::clearCache() now calls CacheRebuildManager::clearSymfonyCache(), the same deferred, background-rebuilding path every other cache-clearing action in the app already uses. Module deletion no longer removes a module's files until after that rebuild has actually finished — the removal is scheduled as a second deferred step, so the container being served never has a template path in it that doesn't exist on disk anymore.
Upgrade notes
No schema changes. No manual steps.