@@ -4,52 +4,28 @@ All notable changes to this project will be documented in this file.
44
55## [ Unreleased]
66
7- - Added Symfony AI Mate (` symfony/ai-mate ` , dev-only) as a project-aware MCP server for AI coding
8- agents; wired in ` .mcp.json ` to run inside the ` phpfpm ` container via ` docker compose exec ` .
9- Includes the Monolog bridge (` symfony/ai-monolog-mate-extension ` ) exposing log search/tail tools.
10- - Sped up the Playwright CI job: it now runs in parallel (3 workers, sized to the 4-vCPU public
11- GitHub runner) instead of the default 2, added ` ipc: host ` to the ` playwright ` Compose
12- service so parallel Chromium does not exhaust Docker's default 64 MB ` /dev/shm ` , pulls the
13- container images once up front in parallel instead of on demand serially across steps
14- (~ 90s of pulls overlapped), and dropped the redundant ` playwright install --with-deps ` step
15- (the pinned Playwright image already ships the matching browsers).
16- - Pre-pull the ` phpfpm ` and ` mariadb ` images in parallel in the PHPUnit, Doctrine and API-spec
17- CI jobs (running ` phpfpm ` starts ` mariadb ` via ` depends_on ` , so the two were otherwise pulled
18- serially on demand). The Doctrine Postgres job is unaffected — it builds ` phpfpm ` locally.
19- - Removed a dead statement in ` MediaRepository::getPaginator() ` that referenced the undefined
20- variables ` $page ` and ` $itemsPerPage ` ; the computed value was never used.
21- - Fixed inverted user-type guard in ` UserService::activateExternalUser() ` : the "user is not of
22- external type" check could never trigger due to a stray negation (` === !$user->getUserType() ` ).
23- The endpoint was still protected by ` ExternalUserAuthenticator ` , so this restores the intended
24- defense-in-depth at the service layer. Added unit tests.
25- - Enabled PHPStan's ` reportIgnoresWithoutComments ` : inline ` @phpstan-ignore ` annotations must
26- carry a comment explaining the suppression.
27- - Added structured, channel-split application logging (ADR 011): per-domain Monolog channels
28- (` auth ` , ` screen ` , ` media ` , ` feed ` , ` interactive ` , ` cache ` ) with per-channel prod handlers
29- thresholded by ` LOG_LEVEL_<CHANNEL> ` (falling back to a global ` LOG_LEVEL ` ), a configurable
30- ` LOG_PATH ` output destination (default ` php://stderr ` ), request/identity/trace-context
31- processors, request-id propagation via ` X-Request-Id ` , and an auth-event logging subscriber.
32- - Renamed the outbound-HTTP-client log channel ` app_http ` → ` outbound_http ` and silenced
33- Symfony's redundant native ` http_client ` channel logging (a ` NullLogger ` decorates it), so
34- ` LoggingHttpClient ` is the single source of outbound-HTTP logs (no duplicate request logging).
35- - Adopted OpenTelemetry semantic-convention field names for log records: request/identity
36- context (` http.route ` , ` url.path ` , ` client.address ` , ` user.id ` XOR ` screen.id ` ,
37- ` tenant.key ` ) plus the HTTP client's ` http.request.method ` / ` url.full ` /
38- ` http.response.status_code ` / ` http.client.request.duration ` . Added GDPR-safe
39- client-address truncation and secret-key redaction (` SensitiveDataProcessor ` ), and
40- structured exception serialization (` type ` , ` message ` , …) under the ` exception ` context
41- key (` ExceptionContextProcessor ` ). See ` docs/logging.md ` .
42- The HTTP client now logs completed requests at ` info ` and failures at ` error ` on the
43- ` outbound_http ` channel, thresholded by the new ` LOG_LEVEL_OUTBOUND_HTTP ` like every
44- other channel; the ` HTTP_CLIENT_LOG_LEVEL ` env var is removed (use ` LOG_LEVEL_OUTBOUND_HTTP ` ).
7+ ## [ 3.0.0-rc5] - 2026-06-10
8+
9+ - Added structured, channel-split application logging (ADR 011): per-domain Monolog channels with
10+ per-channel prod thresholds (` LOG_LEVEL_<CHANNEL> ` , falling back to ` LOG_LEVEL ` ), a configurable
11+ ` LOG_PATH ` , request/identity/trace context processors, ` X-Request-Id ` propagation and an
12+ auth-event subscriber. See ` docs/logging.md ` .
13+ - Adopted OpenTelemetry semantic-convention log field names, with GDPR-safe client-address
14+ truncation, secret-key redaction and structured exception serialization; renamed the
15+ outbound-HTTP channel ` app_http ` → ` outbound_http ` (thresholded by ` LOG_LEVEL_OUTBOUND_HTTP ` ;
16+ ` HTTP_CLIENT_LOG_LEVEL ` removed) and silenced Symfony's redundant native ` http_client ` logging.
17+ - Added a ` database ` log channel and a DBAL middleware that logs MariaDB connection failures
18+ (by driver error code; ` critical ` /` error ` ), so operators without DB access get a signal.
4519- Enforced the logging conventions in CI with three project-local PHPStan rules
46- (` logging.silentCatch ` , ` logging.interpolatedLogMessage ` , ` logging.exceptionContextKey ` ) and
47- migrated the previously silent catch sites to log the exception, surface it, or be explicitly
48- annotated as intentional.
49- - Added a ` database ` log channel and a DBAL driver middleware that logs MariaDB
50- connection-establishment failures (classified by raw driver error code; connection
51- pressure/unreachability at ` critical ` , other failures at ` error ` ) so operators without database
52- access get a failure signal. Logging-only — no reconnect/retry.
20+ (` logging.silentCatch ` , ` logging.interpolatedLogMessage ` , ` logging.exceptionContextKey ` ).
21+ - Enabled PHPStan's ` reportIgnoresWithoutComments ` : inline ` @phpstan-ignore ` must carry a comment.
22+ - Added Symfony AI Mate (` symfony/ai-mate ` , dev-only): a project-aware MCP server run in the
23+ ` phpfpm ` container, with a Monolog log-search bridge.
24+ - Sped up the Playwright CI job: parallel workers (` ipc: host ` for shared ` /dev/shm ` ), up-front
25+ parallel image pulls and removal of the redundant ` playwright install ` step; also pre-pull
26+ ` phpfpm ` /` mariadb ` in parallel in the PHPUnit, Doctrine and API-spec jobs.
27+ - Fixed an inverted user-type guard in ` UserService::activateExternalUser() ` .
28+ - Removed a dead, undefined-variable statement in ` MediaRepository::getPaginator() ` .
5329
5430## [ 3.0.0-rc4] - 2026-06-04
5531
0 commit comments