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

.
test(schedule): add unit coverage for scheduler core
- add unit tests for registry, runner, run/list commands and file mutex

- make AsScheduledTask repeatable for multi-schedule support
.
chore(docker): run schedule:run in ofelia jobs
- replace legacy system/cron.php execution with console schedule:run

- apply the change to dev and prod compose overrides
.
refactor(console): unify command output with SymfonyStyle
- switch scheduler and maintenance commands to SymfonyStyle output

- switch i18n scan/translate commands to SymfonyStyle output

- keep command behavior unchanged
.
fix(schedule): remove deprecated cron-expression usage and clean options
- replace CronExpression::factory() with constructor

- remove redundant default option arguments

- mark injected command dependencies as readonly where applicable
.
feat(schedule): add attribute-based scheduler with schedule:run
- add scheduler core (registry, runner, mutex, task attribute)

- add schedule:list and schedule:run commands

- migrate cron tasks to scheduled command attributes and remove system/cron.php

- add dragonmantank/cron-expression as direct dependency
.
feat(console): add symfony console entrypoint and i18n commands
- add system/bin/console based on symfony/console

- register commands via DI tag johncms.console_command

- migrate scan/translate to i18n:* commands and remove legacy bin scripts
.
docs(agents): require php and composer in docker
.
test(router): extend unit coverage for router factories
Add tests for RequestContextFactory and RouteCollectorFactory, and cover nested group middleware behavior in RouteCollection.
.
feat(test): add unit testing setup
Add PHPUnit config, router unit tests, and CI job for unit suite.

Upgrade dev stack to phpunit 11, psalm 6, and gettext/php-scanner 2 to resolve parser/dependency conflicts.
.
refactor(router): add route middleware pipeline
Introduce middleware dispatching in router runtime and pass matched route middlewares through RouteMatchResult/Symfony matcher.

Move guestbook access conditions from conditional route registration to dedicated middlewares for edit, delpost, reply and clean routes.