Repository navigation
Release v1.25.0
v1.25.0
Changelog
SiteBackup: process deadlines that kill the whole tree, PSR-3 logging with secret redaction, injected clock, strict setup profile config See UPGRADING.
Added
- Logging (REQ-OBS-001): backup create / delete / restore and setup runs log start, success and failure through
Psr\Log\LoggerInterfaceon the Monolog channelsite_backup(structured context: action, backup id, profile,
step). Actors, labels, credentials and the dump command are never logged; error messages are redacted
(SecretRedactor). Panel login attempts are logged (success info, failure notice, throttled warning) without the
client IP. A misconfigured setup tabchecker:id is logged as a warning instead of being ignored silently. - Configuration docs:
docs/CONFIGURATION.mdgains a table of contents and the Profiles (REQ-CFG-001) and
Timeouts (REQ-RUNTIME-001) sections.
Changed
- Subprocess deadlines (REQ-RUNTIME-001):
tar, the database dump,nowo:site-backup:db-dumpand console setup
steps run underprocess_timeoutas both hard and idle timeout. Fortar, the dump shell and console steps
(ProcessDeadline) the whole process tree is killed on expiry (descendants first, somysqldumpunder the dump
shell does not survive as an orphan). A timed-out dump
reportsDatabase dump timed out after N seconds (process_timeout).without repeating the command line;db-dump
prints a timeout message and exits 1. A failed or timed-outtarno longer leaves a partial archive in
storage_dir. - Demo: both FrankenPHP Caddyfiles set the timeout hierarchy (
process_timeout300 s < PHP
max_execution_time360 s < Caddywrite400 s;max_wait_time30 s), documented indocs/DEMO-FRANKENPHP.md. - Clock (REQ-DI-001): time-dependent services (
BackupArchiver,SiteBackupManager,RestoreOrchestrator,
SetupOrchestrator,SetupDbDoneGuard,SetupMarkerManager,WorkerRestartSignal, DBAL setup storages) take an optionalPsr\Clock\ClockInterface(frameworkclockservice; defaultNativeClock).
symfony/clockandpsr/logare now explicit dependencies. - Attribute wiring (REQ-SF-003): built-in setup-need detectors use
#[AsSetupNeedDetector(priority: …)], the
time-limit listener#[AsEventListener], the controllers#[AsController], and the event subscribers are tagged by
autoconfigure — no manualaddTag()left except the two request listeners whose priority comes from configuration.
Fixed
setup.default_profileis validated (REQ-CFG-001): a name that is not a key ofsetup.profilesnow fails the
container compile with the path and the defined profiles, instead of a runtime "Unknown setup profile" error in the
wizard.
Documentation
- Spec Kit baseline refreshed (
specs/001-baseline/): inventory 164/164 production files (adds
CsrfProtectionPass,SetupTokenGate,ProcessDeadline,SecretRedactor), domain-grouped functional
requirements, last audited 2026-10-29.
What's Changed
- feat: REQ-100 pass — subprocess deadlines, profile validation, logging, clock, attribute wiring by @HecFranco in #30
Full Changelog: v1.24.1...v1.25.0