fix(renovate): size the scan timeout for a cold run
What happened
The first scan after !84 (merged) enrolled the group could not finish inside the 1h 30m timeout that MR introduced. Measured on the live run: 41 of 56 projects in 72 minutes.
The cost is not autodiscovery — it is the work a cold run has to do. Every branch it finds gets opened, and every JS project's lockfile gets regenerated. Steady-state daily runs will be a fraction of this because most projects have nothing to do; the timeout has to be sized for the cold case regardless, or a re-enrollment can never complete.
Raised to 3h, with the measurement recorded in the preset so the next operator doesn't tune it down to a value that fits a warm run and silently breaks a cold one.
On not retrying a timeout
Left the retry block alone, and added a comment saying why. job_execution_timeout is a distinct failure reason from the three infrastructure classes listed (runner_system_failure, stuck_or_timeout_failure, scheduler_failure), so a timeout is not caught by them today — and it should stay that way. Retrying a scan that legitimately needs more wall-clock than it was given cannot succeed; it just spends the budget a second time. The correct response to this job timing out is to raise the timeout, which is what this MR does.
Related, not fixed here
The same run surfaced a systemic push-rule problem that blocks Renovate on a large slice of the group: 21 of the 31 projects that set a commit_message_regex have a double-escaped one —
^(feat|fix|chore|docs|refactor|test|ci|build|perf|style|revert)(\\(.+\\))?:.+\\( matches a literal backslash, so the optional scope group can never match and every scoped conventional commit is rejected. Bare chore: passes; chore(deps): update x does not. Renovate always writes a scope, so it cannot push a branch to any of those 21 projects — the scan log shows [remote rejected] (pre-receive hook declined) for each.
That is a project-settings fix across 21 projects rather than a change to this catalog, so it is not in this MR.
Validation
glab ci lint valid; the preset YAML parses.