Raxx · internal docs

internal · gated

RCA — stale-branch-guard age check used absolute wall-clock age, false-failing every open PR

Incident ID: 2026-07-30-ci-pr-stale-branch-guard-absolute-age Date: 2026-07-30 Severity: SEV-2 (deploy pipeline blocked repo-wide — every open PR's required ci/woodpecker/pr/ci-pr check was red) Blast radius: Every open PR against develop (confirmed on #4351, #4368, #4369; also blocked the in-flight Paper Trading v1 wave). No production user impact. Author: sre-agent

Summary

The stale-branch-guard step's age check in scripts/ci/check_stale_branch.sh computed now - <fork-point commit timestamp>. For any PR branch cut from develop's current tip, the fork point IS develop's HEAD commit — so once develop had gone 48h+ without a merge, EVERY branch forked from it failed the age check, regardless of how many commits (zero) it was actually behind. develop's tip was ed2237f6d (#4347, merged 2026-07-25 10:52 -0400); by 2026-07-30 that fork point was ~118-153h old depending on when each PR branch was cut, well past the 48h threshold, failing the gate repo-wide. This is a distinct bug from the one fixed in #4347 (which corrected which branch the guard compares against — this incident is about what "age" means once compared against the correct branch).

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Add a develop-quiet monitor: alert (low-priority) when develop has gone >36h without a merge, giving advance warning before any future variant of this gate trips sre-agent 2026-08-13 (file type:reliability)
2 Add explicit test cases to scripts/ci/tests/ for check_stale_branch.sh: (a) 0 commits behind + old fork-point commit → PASS, (b) N>threshold commits behind + fork-point within threshold → FAIL, (c) N commits behind but oldest-missing-commit within threshold → age check passes, commit-count check still governs sre-agent 2026-08-13 (file type:reliability)
3 Audit other Woodpecker gates that reference commit-timestamp-based freshness (e.g., any similar "age since X" checks) for the same absolute-vs-relative age conflation sre-agent 2026-08-20 (file type:reliability)

References