История коммитов

.
refactor(modules): pass the request as an action argument
Closes the remaining modules: contacts, mail, collections, consent, community, help, language, login, notifications, redirect and registration. Controllers no longer hold a Request from the container; private helpers and the ContactForm / HelpLegacyRedirectHandler services take it as a parameter.

Fixes two identical defects found under baseline entries: ContactSettingsController::postedTranslations() and CookieBannerController::buildDto() read multilingual array fields with body(), which returns a string and makes InputBag throw a BadRequestException, so saving either settings page answered 400 whenever a translated field was filled in. Both now use bodyList().
.
refactor(http): read the current request from the stack in shared services
PaginationFactory, PaginationGuard and Theme outlive a request but were built with one. They now read the current request from the RequestStack, the line already taken for Environment, Ads, Counters and LocaleResolver: passing it as an argument would mean touching ~70 files whose actions never take a Request, and Theme is resolved straight from templates where no request exists.
.
refactor(library): pass the request as an action argument
Controllers are container singletons, so a Request injected into the constructor outlives the request it belongs to. Every library controller now takes it as the first action argument; private helpers receive it as a parameter, and LegacyRedirectHandler::handle() takes it from its caller.

Fixes CreateArticleController::renderForm(), called with 9 of its 10 required arguments on both validation-error branches: a flood-control hit or an empty title raised an ArgumentCountError instead of re-rendering the form. The matching PHPStan baseline entry is gone.
.
refactor(album): pass the request as an action argument
Only the actions that actually read the request take it; form and confirmation actions keep their signatures.
.
refactor(profile): pass the request as an action argument
Only the actions that actually read the request take it; form actions keep their signatures.
.
refactor(guestbook): pass the request as an action argument
GuestbookForm::getFormData() now takes the request as a parameter instead of holding it in the constructor: it reads five body fields plus the attached files, which does not reduce to a scalar fact, and a RequestStack in the module's application layer would reintroduce the hidden capture this stage removes.
.
refactor(downloads): pass the request as an action argument
Controllers are container singletons, so a Request injected into the constructor outlives the request it belongs to. Every downloads controller now takes it as the first action argument; private handlers receive it as a parameter, and DownloadPathController forwards it to the controllers it delegates to.

Fixes ImportFileController::handleImport(), which read $category from the caller's scope: a successful import failed with a TypeError in getCategoryUrl(). The helper now takes the category as a parameter, and the matching PHPStan baseline entry is gone.
.
refactor(admin): pass the request as an action argument
Controllers are container singletons, so a Request injected into the constructor outlives the request it belongs to. Every admin controller now takes it as the first action argument; private helpers such as isCsrfValid() receive it as a parameter.
.
refactor(forum): pass the request as an action argument
Controllers are container singletons, so a Request injected into the constructor outlives the request it belongs to. Every forum controller now takes it as the first action argument; private helpers receive it as a parameter.

ForumUtils::topicLink() no longer resolves the request from the container: it needs the host only, which the caller now passes as a string.
.
refactor(http): make the session facade per-request
The shared Session facade now implements ResetInterface, so the kernel drops the bags
of the request it has served before serving the next one. An open session belongs to
the request being served (the FPM boot opens it before the kernel runs) and is left
alone.

Session::save() moves into the finally block of Kernel::handle(): a cycle that throws
no longer leaves its session open for the next one, which is what lets an open session
be read as the current request's.

Also: the console application implements ResetInterface, so the instanceof rule tagged
it as resettable and every HTTP request built the whole CLI application just to reset
it. Its definition now sits before that rule, guarded by a container test.