15 seconds is not enough time to launch a cold headless Chrome when other jobs are fighting over the same machine.
I ran into this with the hourly Medium mirror. The whole run was aborting at session bring up because the default 15s CDP connection deadline was too tight. Publish jobs and generate jobs share a schedule on the same host, and when the machine is under load, Chrome just does not make it in time. Not a flaky failure. Deterministic under contention.
The fix is two parts: raise the deadline to 45 seconds, and add a recovery path. If Chrome still fails to connect within 45 seconds, kill whatever zombie process is squatting the port or the profile, then retry once. Most of the time the retry succeeds because the dead process is gone and Chrome can actually start cleanly.
The 15 second default was probably calibrated for an idle machine. But "idle machine" is not a constraint you can count on when cron jobs for generation, publishing, and mirroring are all sharing the same schedule window. The 45 second ceiling covers the realistic cold start time under load. The single retry covers the case where a previous crashed run left Chrome in a broken state.
Two lines of change. Stops a class of silent hourly failures.