Release v0.4.14 - fix(#490): the Tiered 'cross-node L1 invalidation is OFF' advisory was decided at defaultBackend() build time, but enableInvalidation() needs a coroutine and is only legal from an App::onWorkerStart() hook — so the warning was structurally unsatisfiable, and its always-winning branch MASKED the security advisory (invalidation ON but UNAUTHENTICATED: any Redis writer can forge an L1-evict and DoS the cluster's caches). Decision now deferred past the worker-start hook chain, worker-0 gated, idempotent, evaluated against the current backend. 7 new tests pin the timing contract. - docs(#489): error_log() is overridden to write into debug.log, not stderr — previously undocumented, and invisible in containers. Documented with a four-way probe table plus a container-friendly logging recipe (php://stdout / php://stderr). - docs(#491): App::onWorkerStart() is called as $fn($server, $workerId); the one-arg example bound the Server to $workerId, silently breaking the 'worker 0 only' idiom. Example fixed + explicit signature section added. ext-zealphp pin unchanged (v0.3.60).