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

simba77
fix(install): build the request in the installer instead of resolving it
The installer does not include system/bootstrap.php, so nothing published the synthetic Request service and di(Request::class) threw: /install/ answered 500. It now builds its own request with RequestFactory and passes it to the steps, which are included into the same scope.
simba77
docs: record stage 5c in the migration plan
Stage 5 is closed. Also corrects what the Render debt actually is: addData() without a template list is shareWithAll(), so the whole head meta of a page — not just the title and the theme — stays in the engine for the rest of the process, which is what the isolation test caught.
simba77
test(http): pin the request isolation of two sequential handle() calls
Acceptance test of stage 5: breadcrumbs do not accumulate, a controller answers the request it is serving, pagination follows the current page, the visitor facts do not survive the cycle, and the request stack returns to its boot entry. Records the rule for how a class gets the current request in .agents/architecture.md, and drops the last di(Request::class): FileStorage::saveFromRequest() takes the request as a parameter.

The comparisons take the body of the page, not the whole response: controllers call Render::addData() without a template list, which is shareWithAll(), so the head meta of one page stays in the engine for the rest of the process. That belongs to the Render rewrite, deliberately outside this stage.
simba77
docs: record stage 5b in the migration plan
The request is now an action argument everywhere; records the rules the three subagent batches converged on, how the eight non-controller services were split between a method parameter and the RequestStack, and the six live bugs that were hiding under PHPStan baseline entries.
simba77
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.
simba77
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().
simba77
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.
simba77
refactor(profile): pass the request as an action argument
Only the actions that actually read the request take it; form actions keep their signatures.
simba77
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.
simba77
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.